#include
void moi (char*);
void tulosta (char*x) {
printf("%s \n",x);
}
int main (int argc, const char * argv[]) {
tulosta (argv[2]);
return 0;
}
Miksri rivi: "tulosta (argv[2]);" antaa huomautuksen:
passing arg 1 of 'tulosta' discards qualifiers from pointer target type.
Miten se olisi oikein?
void moi (char*);
void tulosta (char*x) {
printf("%s \n",x);
}
int main (int argc, const char * argv[]) {
tulosta (argv[2]);
return 0;
}
Miksri rivi: "tulosta (argv[2]);" antaa huomautuksen:
passing arg 1 of 'tulosta' discards qualifiers from pointer target type.
Miten se olisi oikein?
Vastaukset 1
Vanhimmat
Varoitus aiheutuu siitä, että annat tulosta-funktiolle parametriksi osoittimen, jonka kohde on vakio (const), vaikka tulosta-funktion ottamaa parametria ei ole määritelty vakioksi.
Eli tässä tapauksessa vaikka argv[2] on const, voi sitä tuon kutsun jälkeen muuttaa tulosta-funktiossa. Ts. virheen saa pois muuttamalla tulosta-funktion signatuuriksi:
void tulosta (const char* x)
Tai voit tietenkin kopioida argv[2]:n sisältämän tiedon ensin toiseen muuttujaan (siis syväkopioida, et vain aseta pointteria), ja sitten sillä uudella muuttujalla kutsut tuota tulosta-funktiota.