C ++ sscanf实现问题(从文件中读取)

时间:2017-09-21 19:45:44

标签: c++ function

问题在于使用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;
}

1 个答案:

答案 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.

我将使用上述说明让您妥善修复您的计划。