Printf打印错误的特殊字符

时间:2018-06-02 20:42:20

标签: 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); // ß

我做错了什么?

1 个答案:

答案 0 :(得分:0)

正如我对问题的评论中所说,这是一个语言环境问题。

我只需要使用setlocale(),控制台中的输出就会起作用。