我对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命令吗?为什么我不能读完整个字符串?提前感谢您的时间和帮助!!
保
答案 0 :(得分:4)
我怀疑问题实际上number
和letter
分别属于int
和char
类型。 scanf()
需要存储值的内存位置地址,而不是变量本身;即,
int number;
char letter[2];
sscanf(token[1], "%d%s", &number, letter);
我已将letter
变为两个字符的数组,并传递数组的地址;与您使用的%s
扫描转换相匹配。