无法理解struct to char *转换

时间:2013-07-08 14:41:35

标签: c++ struct char

我已经定义了一个struct数据并将其分配给char *。但是,strlen函数的大小总是将结果表示为1,cout不显示任何内容。这是我的代码:

    struct data
    {
        int x;
        int y;
    };
    int main()
    {
        data d;
        d.x = 10;
        d.y = 20;
        char *ch = (char*)&d;
        cout <<"Length:" strlen(ch) << endl;
        cout << ch << endl;

    }

输出是: 长度: 1

请帮助我理解发生了什么?

3 个答案:

答案 0 :(得分:3)

strlen函数计算传递的字符串中的所有字节,直到找到字符'\0'。此字符与整数0相同。

那么对strlen的调用是在它找到零之前计算字节数,在你的情况下,零恰好在结构二进制表示的第二个字节中,这意味着“字符串长度” “是一个。

您可以从中推断出的唯一一件事就是您使用的是little endian系统。除此之外,调用是未定义的行为,因为“字符串”实际上不是字符串。

答案 1 :(得分:2)

它返回1的原因是因为您将结构视为char数组。执行此操作,您将重新解释结构的内容 - 整数10,它可能作为字符串存储在内存中0x0A000000。这会产生1的长度(在数组中的空字符之前只有1个非零值)

答案 2 :(得分:0)

即使您尝试将某些内容视为不是字符串的字符串,如果您只想打印结构中的值,也可以执行以下操作:

struct data
{
    int x;
    int y;
};
int main()
{
    data d;
    d.x = 10;
    d.y = 20;
    cout << "x is " << d.x << ", y is " << d.y << endl;

}

为什么 您试图将该结构视为字符串?