我想读取一个文件,前两行。程序是:
int main(void)
{
FILE *fp;
char buf[1024];
char value[128];
long mem[2];
char *pos;
if (!(fp = fopen("example.txt", "r"))) {
printf("CANNOT open example.txt\n");
return -2;
}
for(int i = 0; i < 2; ++i) {
fgets(buf, 1024, fp);
pos = strstr(buf, ":");
if (!pos) {
printf("MEMINFO wrong format\n");
return -1;
}
strncpy(value, pos + 1, 128);
mem[i] = atol(value);
memset(buf, 0, sizeof(buf));
memset(value, 0, sizeof(buf));
}
}
和 example.txt 就像:
MemTotal: 3541412 kB
MemFree: 123500 kB
Buffers: 11372 kB
Cached: 2582072 kB
SwapCached: 1520 kB
Active: 1832328 kB
Inactive: 1493348 kB
Active(anon): 1608692 kB
Inactive(anon): 1269620 kB
Active(file): 223636 kB
当达到第二个 fgets 时,它会生成一个段错误。使用 gdb,我发现文件指针 fp 在第二个 fgets 中变为 0。问题是什么?fgets可以这样使用吗?