This expresssion
string(0)
is already invalid and results in undefined behaviour.
The compiler considers this expression like
string( (const char * )0 )
but null pointer may not be used in this constructor.
The loop you wrote could work if you define one more element in the array - an empty string as for example
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";
}
However first of all there is no sense to declare the array as an array of strings. It is an array of a fixed size with values that are supposed to be immutable.
So it is better to use string literals instead of objects of type std::string.
I would suggest to use std::array instead of the ordinary array. For example
#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 );
If your compiler does not support the class std::array then you can use an ordinary array declared the following way
const char * mesi[] =
{
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre", 0
};
and the function can look like
void printMesi( const char *mesi[])
{
for ( const char *m = mesi; m != 0; m++ )
std::cout << m << "\n";
}
char f[] = "f";) have any kind of termination marker.