Почему cout не печатает внешнюю переменную "C"?

Рассмотрим следующий код:

extern "C" {
    #include <lib.h>
}

#include <iostream>

int main() {

    unsigned char a='a';
    unsigned char b=some_struct_in_libh->unsignedchar;

    cout << a << " " << b << endl; //Prints only a

    printf("%u\n",b); //Prints b

    cout << static_cast<int>(b) << endl; //Also prints b

    return 0;
}

Почему это ведет себя так?

1 ответ

Решение

Это не только печать a совсем. Вместо этого вы видите, что cout печатает данные типа символов как символы, а не числа. Ваш b это какой-то персонаж, который не для печати, так cout старательно печатает его как пустое место.

Вы нашли решение, приведя его к int.

РЕДАКТИРОВАТЬ: Я почти уверен, что ваш printf работает только случайно, потому что вы сказали ему ожидать неподписанного int и дали ему символ (разное количество байтов).

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