输出表示当文件fileIn的文字正确且按顺序打印时,所有数组值都是“焦虑”。我的问题可能出在realloc()?
ReadIn = malloc(sizeof(char) * 50);
while(fscanf(fileIn, "%s", ReadIn) != EOF){
wordlist = (char **)realloc( wordlist, (numwords + 1) * sizeof(char*));
printf("%s\n",ReadIn);
wordlist[numwords] = ReadIn;
numwords++;
}
for(i = 0; i < numwords; i++){
printf("%d %s\n", i , wordlist[i]);
}
输出:
This
is
a
journey
into
fear
and
anxiety.
0 anxiety.
1 anxiety.
2 anxiety.
3 anxiety.
4 anxiety.
5 anxiety.
6 anxiety.
7 anxiety.
答案 0 :(得分:3)
使每个数组指针指向ReadIn
缓冲区,该缓冲区将包含读入的最后一个字符串。
您希望复制读入的每个字符串:
//change: wordlist[numwords] = ReadIn;
wordlist[numwords] = strdup(ReadIn);
完成wordlist
数组后,您还应该注意释放每个字符串。
如果您的编译器的运行时库没有非标准但通用的strdup()
函数,则很容易实现(或找到公共域版本)。
答案 1 :(得分:0)
wordlist [numwords] = ReadIn;
在上面的Line中,您只需指定'ReadIn'的地址而不是字符串。所以从'ReadIn'中包含的文件中读取的最后一个字符串已经重复打印。
所以,你需要将读取的字符串复制到你的字符串数组
strcpy(wordlist [numwords],ReadIn);