我无法找到特定字符串数组的最后一个元素。 在这个函数中,当p到达数组的最后一个元素时,我在执行时出错。 这是我的代码。任何人都可以帮助我吗?
string mesi[] = { "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" };
printMesi(mesi);
void printMesi(string v[])
{
for (string* p = v; *p != string(0); p++)
cout << (*p) << "\n";
}
答案 0 :(得分:1)
这对你有用。我传递了数组的长度(我从主函数中获取),然后打印数据。在C ++中,当您将数组作为参数传递时,您无法直接确定大小:
#include <iostream>
using namespace std;
void printMesi(string v[], int length)
{
for(int i=0;i<length;i++)
cout<<v[i]<<"\n";
}
int main()
{
string mesi[] = { "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" };
printMesi (mesi, sizeof(mesi)/sizeof(mesi[0]));
return 0;
}
答案 1 :(得分:-1)
此表达
string(0)
已经无效并导致未定义的行为。
编译器将此表达式视为
string( (const char * )0 )
但可能不会在此构造函数中使用null指针。
如果在数组中再定义一个元素,那么你编写的循环就可以工作 - 例如一个空字符串
string mesi[] =
{
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre", ""
^^^
};
printMesi(mesi);
void printMesi(string v[])
{
for (string* p = v; *p != ""; p++)
cout << (*p) << "\n";
}
然而,首先,将数组声明为字符串数组是没有意义的。它是一个固定大小的数组,其值应该是不可变的。
因此最好使用字符串文字而不是std :: string类型的对象。
我建议使用std::array
而不是普通数组。例如
#include <array>
//...
std::array<const char *, 12> mesi =
{
{
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
}
};
void printMesi( const std::array<const char *, 12> &mesi );
{
for ( const char *m : mesi ) std::cout << m << "\n";
}
printMesi( mesi );
如果您的编译器不支持类std::array
,那么您可以使用以下方式声明的普通数组
const char * mesi[] =
{
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre", 0
};
,功能可以看起来像
void printMesi( const char *mesi[])
{
for ( const char *m = mesi; m != 0; m++ )
std::cout << m << "\n";
}