【发布时间】:2021-12-25 18:32:24
【问题描述】:
我已经在下面的代码上工作了一段时间,但由于某种原因,在返回数组并在主函数中使用它后,我无法正确打印出数组的字符数组。 我想不出任何其他可以在代码中打印的东西来检查问题所在。我确实检查了论坛中的其他类似帖子,但我找不到那里给出的答案与我的代码编写方式之间的任何差异。 有人发现有什么不对吗?
非常感谢。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STRING 35
char **getWordsList(size_t *wordsNumber);
int main(){
int wordsNumber;
char **arrayOfArrays=getWordsList(&wordsNumber);
printf("WordsNumber is %d",wordsNumber);
printf("\nPrinting the resulting array of arrays: \n");
for (size_t indx=0; indx<wordsNumber; indx++){
printf("%s ", *(arrayOfArrays+indx)); //WHY ISNT THE STRING PRINTED CORRECTLY ?
}
free(*arrayOfArrays);
free(arrayOfArrays);
return 0;
}
char **getWordsList(size_t *wordsNumber){
printf("Please enter the number of words: ");
scanf("%zu",wordsNumber);
fflush(stdin);
char **wordsList=malloc(sizeof (char *)*(*wordsNumber));
if (wordsList!=NULL){
for (size_t indx=0; indx<*wordsNumber; indx++)
{
char inputWord [30];
printf("Please enter a word: ");
fgets(inputWord,sizeof(inputWord),stdin);
fflush(stdin);
printf("Word is %s",inputWord);
*(wordsList+indx)=malloc(MAX_STRING*sizeof(char));
if (*(wordsList+indx)){
*(wordsList+indx)=inputWord;
printf("Added array component is: %s\n",*(wordsList+indx));
}
}
return wordsList;}
else{
printf("Error in allocating memory for array of arrays");
}
}
【问题讨论】:
-
它在打印什么?您希望它打印什么?
-
@Oriol 这个声明 *(wordsList+indx)=inputWord;产生内存泄漏,退出函数后也有未定义的行为。:)
-
@Shawn。我想用这个打印数组的每个字符数组: printf("%s ", *(arrayOfArrays+indx));
-
*(wordsList+indx)... 大多数人会使用wordsList[indx]。而fflush(stdin)是未定义的。 -
@VladfromMoscow。然后使用 strcpy 来解决问题?