Kor*_*gay -1 c linux io bash kernel
我有这个示例代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
第一次运行:
koray@koray-VirtualBox:~$ ./a.out
1
pp
pp
koray@koray-VirtualBox:~$
Run Code Online (Sandbox Code Playgroud)
好吧,我认为这是所有预期的,因为p是ASCII中定义的1字节长字符,我正在读取3个字节.(2 p和换行符)在终端中,我再次看到2个字符.
现在让我们尝试一个2字节长的字符:
koray@koray-VirtualBox:~$ ./a.out
1
?
?
Run Code Online (Sandbox Code Playgroud)
我不明白的是,当我将字符'ğ'发送到mytext变量指向的内存时,16位被写入该区域.由于'ğ'是utf-8中的11000100:10011110,因此写入这些字节.
我的问题是,当打印回标准时,C(或者我应该说内核?)知道它应该读取2个字节并解释为1个字符而不是2个1字节字符?