c++ - sscanf_s 无法从字符串中找到所有值

标签 c++ string visual-c++ format scanf

我想从看起来像这样的文本字符串中解析整数:

"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;
}

而且效果很好。

关于c++ - sscanf_s 无法从字符串中找到所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971034/

相关文章:

java - 如何读取 .txt 文件并每 8 个字符分割一次?

java - 不使用 String.split() 分割字符串 - 并返回分隔符

c++ - 在 Windows 上使用 clang 链接 msvc 内在函数的问题

c++ - 显示 new() 在 malloc 返回地址调用对象构造函数的源代码

c++ - 指向模板类全局实例的指针作为模板参数?

c++ - POSIX regex.h 是否提供 unicode 或基本上非 ascii 字符?

c++ - 使用头文件变量生成包含目录

java - 在给定的 int 中设置位 1-3,仅根据需要设置位 1-3

c - 在构造的字符串上使用 execvp 的问题

C++ 模板特化和继承