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`,而不是其实际类型。