如何写出一个标记化的字符串

时间:2012-07-09 19:21:29

标签: c string split strtok scanf

我对C很陌生,我发现问题的任何例子似乎都没有用,或者我完全误解了解决方案是什么。我有一个包含以下数据的大文件:

LYS 24L HB2 45.212 39.585 124.457 SC0 0.145 -0.795 0.585 0.157

每行

。我已经使用strtok标记了数据。我需要的是来自第二个字段,我希望将24存储为整数进行比较,并将L存储为char以进行比较。

我尝试使用

sscanf(token[1], "%d%s", number, letter);

但我一直收到Segmentation fault错误。在进一步试验sscanf后,我试图打印出“LYS”(试图进一步理解我的问题)但是我的程序只能使用以下命令打印L:

sscanf(token[0], "%c", &stemp);
letter = stemp;
printf("%c \n", letter);

但是如果改变%c ---> %s(希望获得整个字符串)然后我再次获得分段错误错误...有什么我不明白的sscanf命令吗?为什么我不能读完整个字符串?提前感谢您的时间和帮助!!

1 个答案:

答案 0 :(得分:4)

我怀疑问题实际上numberletter分别属于intchar类型。 scanf()需要存储值的内存位置地址,而不是变量本身;即,

int number;
char letter[2];

sscanf(token[1], "%d%s", &number, letter);

我已将letter变为两个字符的数组,并传递数组的地址;与您使用的%s扫描转换相匹配。