C++ 为什么可以';我是否从string函数返回字符串数组?
我想使用我的函数创建一个字符串数组,但我的字符串函数的返回不起作用C++ 为什么可以';我是否从string函数返回字符串数组?,c++,arrays,string,return-value,C++,Arrays,String,Return Value,我想使用我的函数创建一个字符串数组,但我的字符串函数的返回不起作用 string input() { int months[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; string array[12]; for (int i = 0; i < 12; i++) { int j = 0; while (j < months[i]) {
string input() {
int months[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
string array[12];
for (int i = 0; i < 12; i++)
{
int j = 0;
while (j < months[i])
{
array[i] = array[i] + "-";
j++;
}
}
return array[12];
}
int main() {
string array[12];
array[12] = input();
return 0;
}
字符串输入(){
整月[12]={31,28,31,30,31,30,31,30,31,31};
字符串数组[12];
对于(int i=0;i<12;i++)
{
int j=0;
而(j
首先声明函数返回单个std::string
对象。其次,返回array[12]
,它是十二元素数组的第十三个元素
实际上,您不能从函数返回普通数组。数组衰减为指向其第一个元素的指针,当函数返回时数组的生命周期结束时,该指针将立即失效
有两种解决方案:将数组(作为指向第一个元素的指针)作为参数传递给函数。或者返回例如一个对象。您的问题是,您的操作语法错误,其中一些是不可能的。不幸的是,这两种情况都不会导致编译时错误,它只会执行其他操作,包括未定义的行为 您需要像这样声明函数:
std::array<std::string, 12> input() {
int main() {
std::array<std::string, 12> array = input();
for (std::string s : array) {
std::cout << s << std::endl;
}
return 0;
}
并将其作为
return array;
按如下方式获取并打印数据:
std::array<std::string, 12> input() {
int main() {
std::array<std::string, 12> array = input();
for (std::string s : array) {
std::cout << s << std::endl;
}
return 0;
}
intmain(){
std::array=input();
for(std::string s:array){
std::cout数组[12]
位于数组的末尾,即使它在边界内,也将是一个字符串,而不是字符串的集合
C样式的数组是不可分配的。std::vector
和std::array
是可分配的替代方案
using MonthMarks = std::array<std::string, 12>;
MonthMarks input() {
std::array<int, 12> months = { 31,28,31,30,31,30,31,31,30,31,30,31 };
MonthMarks result;
for (int i = 0; i < 12; i++)
{
int j = 0;
while (j < months[i])
{
result[i] = result[i] + "-";
j++;
}
}
return result;
}
int main() {
MonthMarks = input();
return 0;
}
谢谢大家的帮助。我明白了,现在干净了。谢谢你们的回答。我明白了。现在干净了。