在 C 中打印特殊字符时出错。问题是 %c 与 %s

djc*_*als 4 c special-characters

我从 C 开始,我发现 %c 和 %s 之间有一点区别,什么时候必须打印特殊字符。我不知道是我做错了什么,还是 C 的限制:

unsigned char str1[]="á";

printf("str1 c (%c)\n", str1[0]);
printf("str1 s (%s)\n", &str1[0]);

unsigned char str2[]="áéíóúñ";
printf("str2 s (%s)\n", str2);
Run Code Online (Sandbox Code Playgroud)

输出是:

str1 c ( )
str1 s (á)
str2 s (áéíóúñ)
Run Code Online (Sandbox Code Playgroud)

结论:当我尝试用 %c 写特殊字符时,我看不到它。

gsp*_*spr 5

%c格式字符串printf导致相应的参数被转换并解释为unsigned char. Anunsigned char是 1 个字节长。非ASCII字符串中的一个字节不一定对应于您将识别为字符的任何内容。

您的编辑器很可能用于将这些字符串的某些表示放入源代码中,使用某种Unicode编码方案对这两个字符串进行编码。这个 SO answer有一些信息可以帮助您开始在 C 中处理 Unicode。

%s格式化字符串工作正常的原因是它printf只会开始转储字节,直到它遇到空字节终止符。您的输出终端可能设置为与您的编辑器相同的编码方案,因此它能够按照您预期的方式正确解释这些字节。