我正在尝试在函数中创建一个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;
}
非常感谢任何帮助。
答案 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]
并返回变量的地址。