C 逐字读取文件
我不知道为什么,但我的代码打印了一个(null)(null)(null)列表。。。。 我必须打印“words.txt”文件中的单词列表。 另一个问题是:fscanf是否可以忽略空白C 逐字读取文件,c,file,scanf,C,File,Scanf,我不知道为什么,但我的代码打印了一个(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_QU
#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);
}
#定义单词长度1024
#定义尺寸(引用100)
int main(){
char**quote=malloc(sizeof(char*)*(size\u t)size\u quote);
龙我;
对于(i=0;i
您从未将malloc()
的返回值赋值给quote[i]
,因此它们最终保持为NULL
(如果您幸运的话):
此外,您还应该在结尾处对个人的quote[i]
进行free()
-ing:
for(int i = 0; i < SIZE_QUOTE; ++i) free(quote[i]);
free(quote);
for(int i=0;i
评论中已经指出了其他错误,因此我不再进一步阐述。请阅读此。。。并检查
fopen
和fsanf
中的返回值。请参阅手册页了解这一点……以及malloc()
中的返回值。除非每个单词都1023
个字符长,否则这是一种存储信息的内存效率极低的方法。当你阅读一个单词时,你可以很容易地得到它的strlen()
,然后分配strlen()+1
字符来存储每个单词。否则,您也可以使用100x1024
2D array.UpV作为斑点,但最好显示正确的代码。@WeatherVane Right,通过一些示例进行了一些扩展。
char **quote = malloc(sizeof(char*) * (size_t)SIZE_QUOTE);
for(int i = 0; i < SIZE_QUOTE; i++){
quote[i] = malloc(sizeof(char) * WORD_LENGTH);
if(!quote[i])
char quote[SIZE_QUOTE][WORD_LENGTH] = {{'\0'}};
for(int i = 0; i < SIZE_QUOTE; ++i) free(quote[i]);
free(quote);