【发布时间】:2018-05-03 20:53:39
【问题描述】:
我不知道为什么,但我的代码打印了一个 (null)(null)(null).... 我必须打印文件“words.txt”中的单词列表。 另一个问题是:fscanf 忽略空格?
#define WORD_LENGTH 1024
#define SIZE_QUOTE 100
int main(){
char **quote = malloc(sizeof(char*) * (size_t)SIZE_QUOTE);
long i;
for(i = 0; i < SIZE_QUOTE; i++){
if(!(malloc(sizeof(char) * (size_t)WORD_LENGTH)))
exit(1);
}
i = 0;
FILE *pf = fopen("words.txt", "r");
while(!feof(pf) && i < SIZE_QUOTE){
fscanf(pf, "%s", quote[i]);
printf("%s", quote[i]);
i++;
}
fclose(pf);
free(quote);
}
【问题讨论】:
-
... 并检查来自
fopen和fsanf的返回值。请参阅手册页 -
...以及来自
malloc()的返回值。 -
除非每个单词都是
1023个字符长——这是一种存储信息的极其低效的记忆方式。当你读一个单词时,你可以很容易地得到它的strlen(),然后分配strlen() + 1字符来存储每个单词。否则,您不妨只使用100x10242D 数组。