Nie mogę wydawać się owinąć głowę wokół problemu. czego mi brakuje?Drukowanie wartości w tablicy wskaźnika w C
Rozważmy następujący
int main(int argc, char *argv[]) {
while (*argv) {
printf("argv[] is: %s\n", *argv);
++argv;
}
return 0;
}
drukuje się każdą wartość argv. Więc wiersz polecenia, takie jak ./example arg1 arg2
byłoby wyjście następuje:
`argv[] is: ./example`
`argv[] is: arg1`
`argv[] is: arg2`
Rozważmy teraz następujący (co mam problemy z):
int main(void) {
char *days[] = {
"Sunday",
"Monday",
"Tuesday"
};
while (*days) {
printf("day is %s\n", *days);
*days++;
}
return 0;
}
Gdy próbuję skompilować, otrzymuję błąd cannot increment value of type 'char *[3]'
Jeśli zmienię *days++
na (*days)++
, to kompiluje. Jeśli go uruchomię, będzie działać wiecznie i ostatecznie zakończy się niepowodzeniem z bus error
.
Jednak nie wykonuje iteracji po każdej wartości days[]
. Próbowałem nawet wstawić wskaźnik zerowy w postaci '\0'
i "\0"
w tablicy dni bez efektu.
Czego mi brakuje?
http://ideone.com/GM4wIN – BLUEPIXY
Zobacz '++ argv;' '* vs dni ++;'! – alk