如何在C中读取格式化数据?

时间:2015-02-21 00:25:47

标签: c

data.txt

jeju islan, 15:00, 16:00

在test.c中

char* a;
char* b;
char* c;
scanf("%[^,], %s, %s", a, b, c);

gcc test.c -o test
./test <data.txt

但结果是

Segmentation fault :11

我想知道我的错是什么。

2 个答案:

答案 0 :(得分:3)

这几乎是正确的格式 * 。在这种情况下获得段错误的最常见原因是tmp.nametmp.opentmp.close没有足够的空间来存储值,或者您传递了未初始化的指针。

确保所有三个字段都是正确的数组或指针malloc - 编辑:

char* a = malloc(100);
char* b = malloc(10);
char* c = malloc(10);
int count = scanf("%99[^,], %9[^,], %9s", a, b, c);
if (count == 3) { // All three items were read successfully
    ... // Do something with a, b, and c
}
free(a);
free(b);
free(c);

* 谢谢Jonathan Leffler的纠正!

答案 1 :(得分:-1)

我相信你应该提供scanf作为指针的论据 - 试试这个:

scanf("%[^,], %s, %s", &tmp.name, &tmp.open, &tmp.close);