[英]sscanf_s can't find all values from string
我想从看起来像这样的文本字符串中解析整数:
"f 1/2/3 4/5/6 7/8/9"
成:
int arr1[3] = { 1, 4, 7 };
int arr2[3] = { 2, 5, 8 };
int arr3[3] = { 3, 6, 9 };
我编写了以下代码,使用sscanf_s
根据字符串的一般格式进行解析:
// line = "f 1/2/3 4/5/6 7/8/9"
int arr1[3], arr2[3], arr3[3];
sscanf_s(line.c_str(), "f %d/%d/%d %d/%d/%d %d/%d/%d",
&arr1[0], &arr2[0], &arr3[0],
&arr1[1], &arr2[1], &arr3[1],
&arr1[2], &arr2[2], &arr3[2]);
奇怪的是,运行此代码后,数组的内容为:
arr1 = { 4, 7, -858993460 };
arr2 = { 5, 8, -858993460 };
arr3 = { 6, 9, -858993460 };
这是一种奇怪的结果,几乎就像它已正确加载数据,然后将数组向左移动一个。 奇怪的是, sscanf_s
返回9
,这表明它使用我传入的格式找到了9个匹配项。我一直在尝试查找错误,但是我真的看不到代码在做什么错。
刚编译这段代码:
#include <iostream>
#include <cstdio>
using namespace std;
int arr1[3], arr2[3], arr3[3];
int main()
{
std::string line = "f 1/2/3 4/5/6 7/8/9";
sscanf_s(line.c_str(), "f %d/%d/%d %d/%d/%d %d/%d/%d",
&arr1[0], &arr2[0], &arr3[0],
&arr1[1], &arr2[1], &arr3[1],
&arr1[2], &arr2[2], &arr3[2]);
std::cout << "arr1 : " << arr1[0] << ", " << arr1[1] << ", " << arr1[2] << std::endl;
std::cout << "arr2 : " << arr2[0] << ", " << arr2[1] << ", " << arr2[2] << std::endl;
std::cout << "arr3 : " << arr3[0] << ", " << arr3[1] << ", " << arr3[2] << std::endl;
}
而且效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.