如何打印指针char数组

时间:2014-07-11 15:25:22

标签: c++ visual-studio-2013

嗯,这是我的计划:

#include <iostream>

using namespace std;

int main()
{
    char str[6][80] = { "Robert Redford",
        "Hopalong Cassidy",
        "Lassie",
        "Slim Pickens",
        "Boris Karloff",
        "Oliver Hardy" };

    const char* pstr[] = { "Robert Redford",
        "Hopalong Cassidy",
        "Lassie",
        "Slim Pickens",
        "Boris Karloff",
        "Oliver Hardy" };

    cout << "str:\n";
    for (int i = 0; i < 6; i++)
    {
        for (int j = 0; j < 80; j++)
        {
            cout << str[i][j];
        }
    }

    cout << endl;

    cout << "pstr:\n";
    for (int i = 0; i < strlen(*pstr) ; ++i)
    {
        cout << pstr[i] << endl;
    }

    cout << "Size of str:" << sizeof str << endl;
    cout << "Size of pstr:" << sizeof pstr << endl;

    return 0;
}

问题是,程序突然停止运行而没有显示str和pstr的大小,我收到一个消息框,说Pointers3.exe停止工作。 我想知道的是,即使它打印出pstr,为什么程序停止工作?

由于声誉限制,我无法发布图片,但这里有一个截图供您考虑。

Screenshot

1 个答案:

答案 0 :(得分:3)

表达式strlen(*pstr)给出了pstr数组中第一个字符串的长度,而不是数组的大小。

为此你可以使用sizeof(pstr) / sizeof(*pstr)。请注意,此技巧仅适用于正确的数组,而不适用于指针。所以,如果你是将数组传递给一个函数,这使得数组衰减为指针,你不能使用这个技巧。


如果您超出pstr数组的范围,会导致undefined behavior,并且很可能会导致程序崩溃。