gpt4 book ai didi

将使用 wscanf 读取的宽字符字符串转换为 C 中的整数

转载 作者:行者123 更新时间:2023-12-04 11:13:42 25 4
gpt4 key购买 nike

我正在尝试将使用 wscanf 读取的字符串转换为使用 wcstol 的整数,两者都来自 Linux 上的头文件 wchar.h。虽然 wcstol 适用于常量宽字符字符串(例如 L"23"),但它不适用于 wscanf 输入,这让我感到困惑。我总是得到 0,即使输入实际上是数字(例如 23)。为什么?

$ ./test 
23
s=23
0

这是我的测试程序:

#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t s[100];
if (wscanf(L"%s", s) == 1) {
wprintf(L"s=%s\n", s);
wprintf(L"%ld\n", wcstol(s, NULL, 10));
}
}

如果我使用 strtol 而不是 wcstol,它可以工作,但我收到此警告:

/usr/include/stdlib.h:183:17: 注意:应为“const char * restrict”,但参数类型为“wchar_t * {aka int *}”

我可以使用类型转换将其静音。我认为 wcstol 是将宽字符字符串解析为整数的正确方法。由于在我的机器上字符实际上是整数,strtol 恰好可以工作,但这让我仍然不确定这是否是正确的解决方案。这里发生了什么?为什么 wcstol 没有完成它的工作?

最佳答案

您的问题出在 wscanf() 格式上。 %s 字段描述符指定指向 char 的指针,就像 scanf() 一样。这两个函数在转换输入的方式上略有不同,但它们在字段描述符的含义上是一致的。

要读入 wchar_t 数组,您需要 %ls。此外,是否应该使用 scanf()wscanf() 主要取决于输入的编码方式,不是 数据类型您要将其内容扫描到其中。

关于将使用 wscanf 读取的宽字符字符串转换为 C 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com