c - printf 打印错误的特殊字符

标签 c casting char

我正在编写 C/C++ 代码,该代码将 char 转换为其整数值,然后需要将其打印回其 char 值。

但是,当我尝试使用 printf 函数打印“扩展 ASCII”字符时,它显示了不同的字符,我无法弄清楚出了什么问题。

int charInt = (int) 'á'; // -31
char casted = (char) charInt;
printf("%c\n", casted); // ß

如果我调试代码(我使用的是 Visual Studio 2017),变量“casted”会在 IntelliSense 中显示正确的“á”值。

我测试了一些不同的打印该字符的方法,但它总是具有相同的结果:

printf("test: %d\n", (signed char)'á');   // -31
printf("test: %d\n", (unsigned char)'á'); // 225
printf("test: %c\n", -31); // ß
printf("teste: %s\n", "á"); // ß
printf("test: %c\n", 225); // ß
printf("test: %d\n", 'á'); // -31
putc(-31, stdout); // ß

我做错了什么?

最佳答案

正如我的问题评论中所述,这是一个区域设置问题。

我只需要使用 setlocale() 并且控制台中的输出有效。

关于c - printf 打印错误的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660986/

相关文章:

c - 根据 C 标准的严格解释,允许对可能无效的指针进行操作

java - 在 getclass() 方法之后转换对象

c# - 要列出的 ListView 项目(字符串)

c - 如何在 while 循环内重新分配 *char[] ?

c - 警告 : multi-character character constant [-Wmultichar]|

转换字符串时间戳 HH :MM:SS to an integer in C

c - 在 C 中分配的指针上 malloc 安全吗?

c - 使用C同步文件夹

java - ArrayList<>.values.toArray,转换为自定义类型数组

c# - .net 中的字符大小不符合预期?