2011-12-12 83 views
0

我想创建一个函数中的字符数组,并将其传递给main,并将其打印出来。这是给我的随机字符的字符串是这样的:╠╠╠╠╠╠╠╠↑C++字符数组给出奇怪的输出

此外,当我的“\ 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; 
} 

任何帮助是极大的赞赏。

回答

2

您在返回一个指针到本地功能的阵列。
这个数组不存在,一旦函数返回,你的程序从可怕的未定义行为受到影响。
这意味着,一旦从函数外引用此数组,数组可能包含或不包含正确的值。您不能依赖数组的有效性。

建议的解决方案:
您应该的FreeStore动态分配指针的函数内部或使用这样做即的C++方式:使用std::string和值返回。请记住,在C++中总是使用std::string而不是原始字符数组,除非由于某些特定的原因,您被迫使用后者(这种情况很少见)。

+0

谢谢您的帮助和迅速的反应。愚蠢的错误,使真正。 – user1093534

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; 
} 
1

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

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; 
} 
+2

+1用于'std :: string',这真的是唯一可以接受的解决方案。 –