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

Я использую Ubuntu 12.04 LTS с gcc. Может ли кто-нибудь сказать мне, как эта переменная символьного типа может содержать более одного байта? ПРИМЕЧАНИЕ. Эта программа будет отображать все символы (более одного), которые вы вводите. Например, если вы наберете «тилип», то это будет отображаться как «тилип». каждый символ содержит 8 бит (один байт), поэтому я набрал 6 символов (6 байт). Затем, как функция getchar может присвоить это значение переменной символьного типа, которая может содержать только один байт?

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

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

    return 0;
}

person thilip kumar    schedule 20.10.2013    source источник
comment
И доказательство того, что он содержит более одного байта?   -  person digital_revenant    schedule 20.10.2013
comment
@thilip Вам интересно, как ch типа char (один байт) может получить выходные значения getchar типа int? В вашем коде есть неявное приведение int -> char.   -  person Igor Popov    schedule 20.10.2013
comment
Kunal, Эта программа будет повторять все символы (более одного), которые вы вводите. Например, если вы наберете thilip, это будет отображаться как thilip. каждый символ содержит 8 бит (один байт), поэтому я набрал 6 символов (6 байт). Затем, как функция getchar может присвоить это значение переменной символьного типа, которая может содержать только один байт?   -  person thilip kumar    schedule 20.10.2013
comment
Linux 12.04 Черт возьми!   -  person Guido    schedule 20.10.2013
comment
Ваш ch называется переменной по какой-то причине... вы можете изменить его значение, поэтому со временем он может содержать много разных символов, по одному за раз.   -  person hyde    schedule 20.10.2013


Ответы (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.

person haccks    schedule 20.10.2013

Это невозможно. Каждый раз, когда вызывается getchar, его предыдущее значение перезаписывается новым.

person damienfrancois    schedule 20.10.2013

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

person pajton    schedule 20.10.2013
comment
Такие символы, как U+2026 (что означает «…»), содержат два байта данных. А у некоторых может быть больше. - person Someone; 28.12.2020