Как переменная символьного типа может содержать более одного байта в этой программе?

Я использую 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 вызывается, его предыдущее значение перезаписывается новым.

Это один байт. Что заставляет вас думать, что это не так?

Другие вопросы по тегам