我有一个测试终端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

10-08 09:45
查看更多