gpt4 book ai didi

c - C如何区分一个字节长的字符和一个2字节长的字符?

转载 作者:行者123 更新时间:2023-11-30 18:18:43 24 4
gpt4 key购买 nike

我有这个示例代码:

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(void){
printf("%li\n",sizeof(char));
char mytext[20];
read(1,mytext,3);
printf("%s",mytext);
return 0;
}

第一次运行:

koray@koray-VirtualBox:~$ ./a.out 
1
pp
pp
koray@koray-VirtualBox:~$

嗯,我认为这都是预期的,因为 p 是用 ASCII 定义的 1 字节长字符,而我正在读取 3 字节。 (2 个 p 和换行符)在终端中,我再次看到 2 个字符。

现在让我们尝试使用 2 个字节长的字符:

koray@koray-VirtualBox:~$ ./a.out 
1
ğ
ğ

我不明白的是,当我将字符“ğ”发送到 mytext 变量指向的内存时,16 位被写入该区域。由于 'ğ' 在 utf-8 中为 11000100:10011110,因此将写入这些字节。

我的问题是,当打印回标准输出时,C(或者我应该说内核?)如何知道它应该读取 2 个字节并解释为 1 个字符而不是 2 个 1 字节字符?

最佳答案

C 不解释它。您的程序读取 2 个字节并输出相同的 2 个字节,而不关心它们是什么字符(或其他任何内容)。

您的终端对您的输入进行编码,并将您的输出重新解释为相同的两字节字符。

关于c - C如何区分一个字节长的字符和一个2字节长的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30379529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com