问题在于使用sscanf。预期结果将是例如案例 - >从文件输入(一行)10 S teat xyz 11 12 - >所有整数都在单独的变量中被加入,而S,teat,xyz都在单独的char变量中。 在我的情况下,所有整数正确地加入。一切都在破碎之间。
检查以下代码中的测试示例。
在这种情况下,我必须使用字符,没有可用于此任务的字符串。
如何让sscanf读取由(n)空格分隔的3个单词。
正确的格式是数字,str,str,str,数字,数字(总是像文件中那样)
我想你现在明白了问题,因为这很容易,但是从C ++暂停了,所以是的。问。
bool addPerson(char *info) {
char a;
char b;
char c;
int ID;
int motherID;
int fatherID;
// example STR:
// 10 S teat xyz 11 12
// RESULT
// 10 z y x 11 12 -> so numbers got correctly
sscanf(info, "%d%s%s%s%d%d", &ID, &a, &b, &c, &motherID, &fatherID);
cout << ID << " ";
cout << a << " ";
cout << b << " ";
cout << c << " ";
cout << motherID << " ";
cout << fatherID;
cout << endl;
return 0;
person *p = new person;
if (first == NULL) first = last = current;
else
last = last -> next = p;
current = p;
return true;
}
答案 0 :(得分:1)
使用
char a;
sscanf(info, "%s", &a);
在语法上是正确的但在语义上是不正确的。
使用%s
作为格式说明符时,需要提供可以存储空终止字符串的位置。 &a
没有提供这样的位置。
您需要以下内容:
char s[20 + 1]; // Make it large enough for your needs. 1 byte for null character ( '\0' )
sscanf(info, "%20s", s); // Make sure to provide a number with %s
// so you don't read any more than what
// s can hold.
我将使用上述说明让您妥善修复您的计划。