C ++ char数组给出了奇怪的输出

时间:2011-12-12 10:55:56

标签: c++

我正在尝试在函数中创建一个char数组,将其传递给main,然后将其打印出来。这给了我一串随机字符,如下所示:╠╠╠╠╠╠╠╠↑

另外,当我检查'\ 0'终止符之前的字符数时,第一个输出会给我输入的字符数,但是第二个输出会给我49(缓冲区的大小),所以我觉得这个是一个涉及NULL终止符的问题,但我不知道如何解决它。 。

我在我的真实项目文件之外重新创建了这个问题,因此代码不那么混乱,如下所示。

const int BUFFER = 50;

char* getWord()
{
        char word[BUFFER];

    cout << "Please enter a word: ";
    cin.getline(word, BUFFER);
        cout << "The word is: " << word; // This prints out the word with no problems..

    return word;
}

int main()
{
        char* wordPtr;

    wordPtr = getWord();
    cout << "Your word is: " << wordPtr << "\n";  // This prints out random symbols.
    system("PAUSE");

    return 0;
}

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

您无法返回本地数组。

const int BUFFER = 50;

void getWord(char* word, int size)
{
    cout << "Please enter a word: ";
    cin.getline(word, size);
    cout << "The word is: " << word;
}

int main()
{
    char word[BUFFER];

    getWord(word, BUFFER);
    cout << "Your word is: " << word << "\n"; 
    system("PAUSE");

    return 0;
}

C ++版本:

string getWord()
{
    string word;
    cout << "Please enter a word: ";
    getline(cin, word);
    cout << "The word is: " << word;

    return word;
}

int main()
{
    string word;

    word = getWord();
    cout << "Your word is: " << word << "\n";
    system("PAUSE");

    return 0;
}

答案 1 :(得分:2)

您正在返回指向函数本地数组的指针 一旦函数返回并且您的程序遭受可怕的未定义行为,该数组就不存在。
这意味着一旦从函数外部引用此数组,该数组可能包含也可能不包含正确的值。您不能依赖该数组有效。

建议的解决方案:
您应该在函数内的freestore上动​​态分配指针,或者使用C ++方式执行此操作,即:使用std::string并按值返回。

请记住,在C ++中总是使用std::string而不是原始caharacter数组,除非出于某些特定原因你被迫使用后者(这种情况很少见)。

答案 2 :(得分:2)

您不能返回指向本地变量的指针或引用,因为一旦函数返回它将不再存在。

可能的解决办法:

std::string getWord()
{
    std::string word;

    cout << "Please enter a word: ";
    std::getline(cin, word);
    cout << "The word is: " << word; // This prints out the word with no problems..

    return word;
}

答案 3 :(得分:1)

您可以使用static char word[BUFFER]并返回变量的地址。