Как переменная символьного типа может содержать более одного байта в этой программе?
Я использую 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;
}
3 ответа
char
переменная типа имеет 1 байт. Вы можете проверить это по
printf("%zu", sizeof(char));
Если вам интересно, что на входе
asdf
это печать
asdf
потому что ch
держит это asdf
тогда ты ошибаешься getchar()
читает только один символ за раз.
Когда вы вводите несколько char
Затем этот набор символов сохраняется во входном буфере. Затем, getchar()
читает символ один за другим из этого входного буфера и присваивает один символ за раз char
переменная ch
, а также putchar()
печатает это один за другим. После каждой итерации ch
перезаписывается новым персонажем, прочитанным getchar()
,
Вы можете проверить это getchar()
читает только один char
в то время, запустив этот код
#include <stdio.h>
int main(void)
{
char ch;
ch = getchar();
putchar(ch);
return 0;
}
Входные данные:
thilip
Выход:
t
Примечание:
getchar()
возвращается int
, Вы должны объявить ch
как int
,
Не может Каждый раз getchar
вызывается, его предыдущее значение перезаписывается новым.