为什么sscanf会跳过每个字符串中的前4个字符?

时间:2015-02-04 02:32:31

标签: c++ file-io

我正在尝试短语文件。每行都有一个标签和一个值。我想查找特定标签,然后返回相关值。

我正在使用sscanf将标记和值读入我分析的两个变量中。但是sscanf正在跳过我发送它的字符串中的第一个字符。

sscanf(line.c_str(), "%s%d", &tag, &value);

例如,如果字符串是“NumPoints 5”,则标签获得“oints”。它一直在跳过前四个字符。我已经检查过,getline正在全线,sscanf部分出了问题。

我做错了什么?

这是我的代码:

int readNumberOfWaypointsInFile(char* filename)
{
    int num_waypoints = 0;

    std::fstream file;
    file.open(filename, std::ios::in);

    std::string line;

    std::string tag;
    int value;

    if (file.is_open())
    {
        while (getline (file, line))
        {
            sscanf(line.c_str(), "%s%d", &tag, &value);

            if(tag == "NumPoints")
            {
                num_waypoints = value;
                break;
            }
        }
    }

    file.close();

    return num_waypoints;
}

1 个答案:

答案 0 :(得分:4)

在编译器中启用警告,并注意它们(例如g++ -Wall -Wextra -Werror)。这会告诉你你的问题:你将C ++字符串的地址传递给C函数sscanf(),它需要一个C风格的字符串(char数组)。这是未定义的行为。