c - 使用 fgets() 和 strtok() 以逗号分隔符读取文件

标签 c fgets strtok

我有一个文本文件,其中包含三个以逗号分隔的字段。 我的文本文件的内容示例:12345,真正的编程新手,BS ME 为了将文件加载到程序中,我使用了下面的代码......我的问题是有时代码有效,有时却不起作用(没有出现错误消息,程序只是自行关闭并且不会继续)。我还观察到文本文件是空白的(没有写入任何内容)它会自动关闭并且不会继续。非常感谢您的帮助。谢谢!

int read(){
     FILE *stream = NULL;
     int ctr;
     char linebuffer[45];
     char delims[]=", ";
     char *number[3];
     char *token = NULL;
     stream = fopen("student.txt", "rt");
     if (stream == NULL) stream = fopen("student.txt", "wt");
     else {
          printf("\nReading the student list directory. Wait a moment please...");
          while(!feof(stream)){            
                ctr=0;
                fgets(linebuffer, 46, stream);
                token = strtok(linebuffer, delims);
                while(token != NULL){
                  number[ctr] = linebuffer;
                  token = strtok(NULL, delims); 
                  ctr++;
                }
          recordCtr++;                      
          }                     
     recordCtr--;
     }
     fclose(stream);
}    

最佳答案

一旦找到 token,就永远不会复制它。您不能复制 linebuffer,因为其中的数据将在加载下一行时被覆盖。

这一行:

number[ctr] = linebuffer;

应该引用 token 来保存最近找到的 token ,但它没有。它可能应该是这样的1:

strcpy(number[ctr], token);

但是你必须更改声明以确保有空间:

char number[3][32];

显然,这会引入缓冲区溢出风险,如果有很长的 token ,它就装不下了。如何最好地处理它留作练习。 :)

1 当临时 vector 用于存储两个数字和一个字符串(名称)时,为什么它被称为“数字”,我无法理解。

关于c - 使用 fgets() 和 strtok() 以逗号分隔符读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335640/

相关文章:

c - 当 `GC.enable(true)` 时,在 Julia 中使用 ccall 时出现段错误

c - 在C中将文本文件读取到数组中

c - 如何在没有 strtok 的情况下分割字符串?

C - 使用 getline() 从文件中打印行

c - Fgets() 在一个操作系统上导致段错误,但在另一个操作系统上不会

c - 将来自 strtok() 的 token 存储在双指针 "2d array"中

c - 如何在 C 中拆分 HTTP header ?

c - 在 C 中将字符串从数组传递到函数指针

c - C 中的堆栈实现产生令人困惑的结果

c - 使用 C 中的按位运算符查找值是否在某个范围内