C 在这个程序中,字符类型变量如何保存多个字节?

C 在这个程序中,字符类型变量如何保存多个字节?,c,getchar,putchar,C,Getchar,Putchar,我将Ubuntu 12.04 LTS与gcc一起使用。有谁能告诉我,这个字符类型变量怎么能包含多个字节?注意:此程序将回显您键入的所有字符(不止一个)。例如,如果您键入“thilip”,那么它将作为“thilip”回音。每个字符包含8位(一个字节),所以我键入了6个字符(6个字节)。那么,getchar函数如何将该值分配给只能保存一个字节的字符类型变量呢 #include <stdio.h> int main(void) { char ch; while ((ch

我将Ubuntu 12.04 LTS与gcc一起使用。有谁能告诉我,这个字符类型变量怎么能包含多个字节?注意:此程序将回显您键入的所有字符(不止一个)。例如,如果您键入“thilip”,那么它将作为“thilip”回音。每个字符包含8位(一个字节),所以我键入了6个字符(6个字节)。那么,getchar函数如何将该值分配给只能保存一个字节的字符类型变量呢

#include <stdio.h>
int main(void)
{
    char ch;

    while ((ch = getchar()) != '#')
        putchar(ch);

    return 0;
}
#包括
内部主(空)
{
char ch;
而((ch=getchar())!='#')
putchar(ch);
返回0;
}

char
类型变量为1字节。你可以通过电话查一下

printf("%zu", sizeof(char));  
如果你想知道,在提供输入时

asdf  
它正在印刷

asdf  
因为
ch
持有这个
asdf
那么你就错了
getchar()
一次只能读取一个字符。
当您输入多个
字符时,这组字符将存储在输入缓冲区中。然后,
getchar()
从该输入缓冲区逐个读取一个字符,并一次将一个字符分配给
char
变量
ch
,然后
putchar()
逐个打印它。每次迭代后,
ch
getchar()
读取的新字符覆盖
通过运行此代码,可以检查
getchar()
一次只读取一个
char

#include <stdio.h>

int main(void)
{
    char ch;
    ch = getchar();
    putchar(ch);

    return 0;
} 
输出:

t  
旁注:
getchar()
返回
int
。您应该将
ch
声明为
int

它是一个字节。什么使你认为它不是?

它不能。每次调用
getchar
,它以前的值都会被新值覆盖

以及它包含多个字节的证明?@thilip您是否想知道
ch
char
类型(一个字节)的
getchar
int
的输出值是如何得到的?在你的代码中有隐式的
int->char
cast。Kunal,这个程序将回显你键入的所有字符(不止一个)。例如,如果您键入“thilip”,那么它将作为“thilip”回音。每个字符包含8位(一个字节),因此我键入了6个字符(6个字节)。那么,getchar函数如何将这个值分配给只能保存一个字节的字符类型变量呢?“Linux12.04”该死!您的
ch
之所以被称为“变量”,是因为。。。您可以更改它的值,这样随着时间的推移,它可以容纳许多不同的字符,一次一个。像U+2026(即“…”)这样的字符中有两个字节的数据。有些人可以吃得更多。
t