我有多行的文本文件。像:
11111111
22222222
33333333
44444444
55555555
...
我编写了 ac 代码来检索每一行。我的代码解析了所有行并将它们成功写入输出控制台。但是在最后一行应用程序崩溃之后。它返回
Program received signal SIGSEGV, Segmentation fault.
这是为什么?
我的 C 代码:
FILE *fPtr;
char file[]="/root/dd";
char *rest;
char *token;
char *buffer;
unsigned long size;
fPtr = fopen(file,"r");
fseek(fPtr, 0, SEEK_END);
size=(unsigned long)ftell(fPtr);
fseek(fPtr, 0, SEEK_SET);
buffer=(char *)malloc(size);
if(fPtr)
{
while(fgets(buffer, size, fPtr))
{
while(token = strtok_r(buffer, "\n", &rest))
{
printf("token: %s\n", token);
buffer = rest;
}
}
fclose(fPtr);
}
else
{
printf("file not open \n");
}
更新
我认为问题与 strtok_r() 无关。因为我改变了我的代码:
FILE *fPtr;
char file[]="/root/dd";
char *rest;
char *token;
char *buffer;
unsigned long size;
fPtr = fopen(file,"r");
if(fPtr==NULL)
{
printf("null pointer\n");
}
fseek(fPtr, 0, SEEK_END);
size=(unsigned long)ftell(fPtr);
fseek(fPtr, 0, SEEK_SET);
buffer=(char *)malloc(size);
if(fPtr)
{
while(fgets(buffer, size, fPtr))
{
printf("buffer: %s\n", buffer);
}
fclose(fPtr);
}
else
{
printf("file not open \n");
}
仍然发生同样的事情。