Moin.
Falls ich mal so direkt sein darf: dein Code ist Käse. Im einzelnen:
#include <stdio.h>
int main(int argc, char *argv[0]) { // 1.
int c;
printf("Alle Zeichen der Argumente einzeln ausgeben...\n");
while (argc-- > 0) { // 2.
while (*argv) { // 3.
while ( (c = ((argv))++ ) != '\0') {
printf("%c\n", c);
}
*argv++; // 4.
}
}return 0;
}
1\. ISO-C verbietet Arrays der Länge 0 - nutze statt dessen die Deklaration `char \* argv[]` oder `char \*\* argv`
2\. `argv` ist ein Array von Zeigern auf Arrays von Zeichen, d.h. zum Durchlaufen aller Zeichen genügen zwei Schleifen - dein Algorithmus ist 'kaputt'
3\. die Schleife `while(\*argv)` bricht nur ab, weil der Zeiger `argv[argc]` zufällig (oder aus Compiler-Toleranz) ein Null-Zeiger ist - das ist keinesfalls garantiert, d.h. du hast hier einen potentiellen Überlauf
4\. die Dereferenz `\*argv++` ist unnötig, da du den Wert an der Stelle `argv` nie verwendest, ein `argv++` genügt
Übersichtlicher geht das ganze z.B. so:
~~~c
#include <stdio.h>
int main(int argc, char * argv[])
{
printf("Alle Zeichen der Argumente einzeln ausgeben...\n");
for(int i = 0; i < argc; ++i)
{
for(char * c = argv[i]; *c; ++c)
printf("%c\n", *c);
}
return 0;
}
Falls du den GCC verwendest, ist der Code mit der Option std=c99
oder std=gnu99
zu kompilieren.
Christoph