我目前正在通过C++ Primer Fifth Edition进行工作。我已经阅读了其他几本C++书籍,但它们并不十分详尽,也很复杂。
这本书为我遗漏的一切都提供了很多帮助。我刚撞墙。
其中一项练习要求我为不使用尾随return,decltype或type别名而返回对十个字符串的数组的引用的函数编写声明。
我知道它只是说写一个声明,就像这样:
string (&returnArray()) [10];
我也想写一个函数定义,像这样:
string (&returnString(int i, string s)) [10]
{
string s1[10];
s1[i] = s;
return s1;
}
在我的主要函数中,我有一个for循环,该循环传递一个字符串文字,并将该字符串存储在指向十个字符串数组的指针内。然后应将结果输出到屏幕。
我遇到的问题是,当我取消对数组的指针的引用时,它将输出地址。如果我取消引用两次,该程序将不输出任何内容并停止响应。
这是我的主要功能,我已对其进行了多次更改,但无法弄清楚为什么输出不正确。我可能全都错了...
int main()
{
string (*s)[10];
for(int i = 0; i != 10; ++i)
{
s = &returnString(i, "Hello");
cout << s[i] << endl;
}
return 0;
}
最佳答案
返回对临时本地对象的引用会调用未定义的行为。
一个简短的解决方法是使其成为static
:
string (&returnString(int i, string s)) [10]
{
static string s1[10];
^^^^^^
s1[i] = s;
return s1;
}
int main()
{
string(&s)[10] = returnString(0, "Hello");
for (int i = 0; i != 10; ++i)
{
s[i] = "Hello";
cout << s[i] << endl;
}
}
关于c++ - 返回对字符串数组的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19272918/