我正在编写 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/