字符串数组的最后一个元素c ++

时间:2015-12-10 10:45:02

标签: c++ arrays string

我无法找到特定字符串数组的最后一个元素。 在这个函数中,当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";

}

2 个答案:

答案 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;
}


行动准则:http://ideone.com/YcWAOA

答案 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";
}