我有一个测试终端I/O的程序:
#include <stdio.h>
int main()
{
char *input[100];
scanf("%s", input);
printf("%s", input);
return 0;
}
它使用ASCII字符,但也使用Unicode字符和emoji。
这是为什么?
最佳答案
您的代码可以工作,因为输入和输出流具有相同的编码,并且您不使用c
执行任何操作。
基本上,您输入一些内容,这些内容被转换成字节序列,然后存储在c
中,然后将bytes
序列发送回stdout
中,将它们转换回可读字符。
只要编码和解码过程兼容,就可以得到“预期”的结果。
现在,如果您尝试使用标准的“string”C函数会发生什么?假设您在终端中键入“♠Hello”,您将得到预期的输出,但是:
strlen(c) -> 8
c[0] -> Some strange character
c[3] -> H
你看到了吗您可以在
char
数组中存储所需的任何内容,但这并不意味着您应该这样做。如果要处理扩展字符集,请改用wchar_t
。