int main(int argc, char *argv[])
 {
    char *line, buffer[1024];
    char *token, *setValue, *pointer;


    FILE *fp = fopen("file", "r");
    if(fp == NULL)
    {
        printf("File was unable to be opened.\n");

    }

     fgets(buffer,1024,fp);
      printf("%s\n", buffer);
     while(fgets(buffer,1024,fp) != NULL)
  {
    strcpy(token, strsep(&buffer, ","));
    printf("%s\n", token);
  }



 return 0;
 }


我在了解strsep的工作方式时遇到了一些麻烦。.我已经为它查找了教程,但是当我尝试其他方法时,它始终无法编译。.如果有人帮助我理解了,我们将不胜感激。语法及其工作方式。谢谢。

**编辑:“缓冲区”包含“我在学校里”

****编辑x 2:我试图解析一个csv文件,并以我在桌面上创建的基本“缓冲区”为例。我想用逗号分隔不同的单词。

最佳答案

关于:

strcpy(token, strsep(&buffer, ","));


变量token仅是一个指针,尚未设置为指向应用程序拥有的任何内存。因此,它将包含变量位置处堆栈上的所有垃圾。

结果是未定义的行为,并且可能导致段故障事件。

建议将token声明为

char token[ 1024 ];


因此它足够大以容纳最大长度的字符串(即buffer[]的长度

因为上面的内容还不够糟糕:

发布的代码缺少语句:#include <string.h>,以便公开功能strsep()的原型,因此编译器将假定参数和返回值是int而不是其实际类型。

发布的代码也缺少语句:#include <stdio.h>,因此函数的参数和返回类型:fopen()fgets(),printf()and even the struct type for FILE are assumed to be int`,而不是其实际类型。

08-28 06:39