c++ - 为什么 sscanf 无法从一个字符串中读取 uint64_t 和 char?

标签 c++ char cstdio cstdint

#include <cstdio>
#include <cstdint>
#include <cassert>

int main() {
    std::uint64_t ui;
    char c;
    auto ret = std::sscanf("111K", "%lu64%[B, K, M, G]", &ui, &c);

    assert(ret == 2);
    assert(ui == 111);
}

我尝试使用 sscanf 从一个字符串中读取一个 uint64_t 和一个 char,但它只读取它 ui (断言 ret == 2 失败)每次我尝试这个。

最佳答案

这里有两个问题。首先

%lu64

应该是

"%" SCNu64 

读入 64 位整数。

第二期是

%[B, K, M, G]

需要一个 char*wchar_t* 作为它的输出参数,因为它填充一个 c 字符串。你需要改变

char c;

至少

char c[2] // 2 because it adds a null terminator

为了捕获K。我们把所有这些放在一起,我们得到

auto ret = std::sscanf("111K", "%" SCNu64 "%[B, K, M, G]", &ui, c);

请注意

%[B, K, M, G]

实际上是在尝试匹配括号内的所有空格和逗号。你也可以把它写成

%[BKMG]

并得到相同的结果。

关于c++ - 为什么 sscanf 无法从一个字符串中读取 uint64_t 和 char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119682/

相关文章:

c++ - 如何在没有波浪号替换的情况下获取真实文件名

c++ - Noise++ Perlin 模块一直返回 0

c++ - Visual Studio 多字节字符到单字节

c - 为什么足够了? (将 int 存储在 char 数组中)

c++ - 我应该在我的 C++ 程序中混合使用 C 和 C++ 风格的 I/O 吗?

c++ - 旋转二维整数数组

c++ - 是否可以在 C++ 中创建构造函数数组?

c++ - 在 C 或 C++ 中处理循环依赖的最佳方法?

java - 删除字符串中的第 n 个字符