为什么cout不打印extern“C”变量?

时间:2013-07-12 15:34:35

标签: c++ c solaris extern sunstudio

请考虑以下代码:

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 个答案:

答案 0 :(得分:6)

根本不打印a。您所看到的是cout将字符类型数据打印为字符而不是数字。您的b是某些不可打印的字符,因此cout有助于将其打印为空格。

您通过将其转换为int来找到解决方案。

编辑:我很确定你的printf只是偶然工作,因为你告诉它期望一个unsigned int并给它一个字符(不同的字节数)。