C Printf打印错误的特殊字符
我正在使用一个C/C++代码,该代码将字符强制转换为其整数值,然后需要将其打印回其字符值 但是,当我尝试使用printf函数打印一个“扩展ASCII”字符时,它会显示一个不同的字符,我无法找出错误所在C Printf打印错误的特殊字符,c,casting,char,C,Casting,Char,我正在使用一个C/C++代码,该代码将字符强制转换为其整数值,然后需要将其打印回其字符值 但是,当我尝试使用printf函数打印一个“扩展ASCII”字符时,它会显示一个不同的字符,我无法找出错误所在 int charInt = (int) 'á'; // -31 char casted = (char) charInt; printf("%c\n", casted); // ß 如果我调试代码(我使用的是Visual Studio 2017),变量“casted”将在IntelliSense
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语言环境。你说的@jww是什么意思?还可以查看堆栈溢出上的和(以及所有语言环境朋友)。显示的实际字符还取决于你正在使用的控制台窗口及其支持的字符集。可能是您试图显示控制台未设置的字符。