为什么 sscanf 会跳过每个字符串中的前 4 个字符?
Why is sscanf skipping the first 4 characters in each string?
我正在尝试对文件进行短语处理。每行都有一个标签和一个值。我想查找特定标签,然后 return 相关值。
我正在使用 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;
}
在编译器中启用警告,并注意它们(例如 g++ -Wall -Wextra -Werror
)。这会告诉您您的问题:您正在将 C++ 字符串的地址传递给 C 函数 sscanf()
,该函数需要 C 风格的字符串(字符数组)。这是未定义的行为。
我正在尝试对文件进行短语处理。每行都有一个标签和一个值。我想查找特定标签,然后 return 相关值。
我正在使用 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;
}
在编译器中启用警告,并注意它们(例如 g++ -Wall -Wextra -Werror
)。这会告诉您您的问题:您正在将 C++ 字符串的地址传递给 C 函数 sscanf()
,该函数需要 C 风格的字符串(字符数组)。这是未定义的行为。