在c

时间:2018-02-07 00:03:53

标签: c string strsep

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如何工作方面遇到了一些麻烦。我已经查找了它的教程,但是当我尝试不同的方法时,它仍然无法编译..如果有人,我将不胜感激。帮助我理解语法及其工作方式。谢谢。

**编辑:'缓冲区'包含“我,是,在,学校”

****编辑x2:我正在尝试解析csv文件,并使用我在桌面上创建的基本“缓冲区”作为示例。我想用相应的逗号分隔不同的单词。

1 个答案:

答案 0 :(得分:0)

关于:

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

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

结果是未定义的行为,它可能导致seg故障事件。

建议将token声明为

char token[ 1024 ];

所以它足够大以容纳最大长度字符串(I.E.长度为buffer[]

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

发布的代码缺少语句#include <string.h>,以便公开函数strsep()的原型,因此编译器会假设参数和返回值为int而不是比他们的实际类型。

发布的代码也缺少语句:#include <stdio.h>所以函数的参数和返回类型:fopen()fgets(),printf()and even the struct type for FILE {{ 1}} int`而不是它们的实际类型。