【发布时间】:2016-08-23 16:19:35
【问题描述】:
我正在尝试使用 fscanf() 从文件中读取一行:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char c, *string[4];
int i = 0,j[4];
fp = fopen("boil.txt", "r");
c = fgetc(fp);
if(fp == NULL)
{ printf("File read error\n");
exit(0);
}
while(c != '\n')
{
fscanf(fp, "%s %d ", string[i] , &j[i]);
i++;
c = fgetc(fp);
}
for(i = 0; i < 4; i++)
{
printf("%s %d\n", string[i], j[i]);
}
}
boil.txt 如下:
boil 4 boilmilk 3 boilwater 5 heat 10
为什么这个程序给出分段错误?
【问题讨论】:
-
你需要分配内存,你的
string[i]指针指向随机位置。 -
这里也要小心,fgetc 和 fscanf 都将文件指针向前移动,你可能得不到你想要的字符。
-
1) 没有错误检查 2)
fgetc返回int,而不是char,这是有充分理由的。 3) 没有分配空间。 4) 等 5) 见How to Ask。 -
@crlanglois:我应该使用两个文件指针而不是一个吗?
标签: c segmentation-fault scanf