Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 逐字读取文件_C_File_Scanf - Fatal编程技术网

C 逐字读取文件

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

我不知道为什么,但我的代码打印了一个(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);
}
#定义单词长度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);