-3

我已经定义了一个结构数据并将其分配给一个 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

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

4

3 回答 3

3

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

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

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

于 2013-07-08T14:44:46.813 回答
2

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

于 2013-07-08T14:45:10.167 回答
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;

}

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

于 2013-07-08T16:02:32.580 回答