Почему (char) + (char) = (int) в C? - PullRequest
       1

Почему (char) + (char) = (int) в C?

1 голос
/ 01 августа 2020

Это по той же причине, что и char + char = int? Почему? ?

Я получил разные результаты для этого исходного кода разными компиляторами

#include <stdio.h>
int main() {
    char a = 100, b = 100;
    printf("%d\n", a + b);
    scanf("%d%d", &a, &b);
    printf("%d\n", a + b);
}

1 Ответ

1 голос
/ 01 августа 2020

Вы получите разные результаты, потому что scanf("%d%d", &a, &b) неверно. Для каждого %d, scanf ожидает адрес объекта int, но вы предоставили адреса char объектов. Это приводит к (опасному) неопределенному поведению.

Для объектов char используйте следующее:

scanf("%hhd%hhd", &a, &b)    // In a environment with signed chars
  -or-
scanf("%hhu%hhu", &a, &b)    // In a environment with unsigned chars
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...