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文件,并使用我在桌面上创建的基本“缓冲区”作为示例。我想用相应的逗号分隔不同的单词。
答案 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`而不是它们的实际类型。