[c] while-schleife mit pointer

Pherseus

Erfahrenes Mitglied
Code:
#include <stdio.h>

int main(int argc, char **argv)
{
    char str[] = "foobar";

    /* das hier klappt */
    while (*argv != 0)
        printf("%s",*argv++);

    /* das hier klappt nicht! warum? */
    while(*str != 0)
         printf("%c",*str++);

    return 0;
}

Im obigen Beispiel wird in der ersten Schleife das argv array durchlaufen und ausgegeben. Das klappt auch wunderbar. Wenn ich dies aber nun mit einem Eigenen Array probier klappt dies irgendwie nicht. Wo liegt mein Fehler?
 
Hi


Probier mal
C:
#include <stdio.h>

int main(int argc, char **argv)
{
    char str[] = "foobar";
	int i=0;
    /* das hier klappt */
    while (*argv != 0)
        printf("%s",*argv++);

    /* das hier klappt nicht! warum? */
    while(*(str+i) != '\0') {
         printf("%c",*(str+i));
	i++;
	}

    return 1;
}

Das str++ geht nicht weil ein normales array statisch ist und nicht verändert werden kann. Sonst könnte man es gleich auf ne neue Adresse setzen.

und das String Endzeichen ist \0 du musst auf '\0' abfragen.(Da Argv eine liste von Strings ist zb "hallo\0","du\0", "0" und bei einem String das Endzeichen eben \0 ist

mfg mike4004
 
Zuletzt bearbeitet:
Im obigen Beispiel wird in der ersten Schleife das argv array durchlaufen und ausgegeben. Das klappt auch wunderbar. Wenn ich dies aber nun mit einem Eigenen Array probier klappt dies irgendwie nicht. Wo liegt mein Fehler?
argv ist kein Array, sondern ein Zeiger auf Zeiger, die auf ein char zeigen. Wenn du deinen String entsprechend auf einen Zeiger auf char umdefinierst, klappt es auch mit der zweiten Schleife:

C:
#include <stdio.h>

int main(int argc, char **argv)
{
    char *str = "foobar";

    /* das hier klappt */
    while (*argv != 0)
        printf("%s",*argv++);

    /* das hier klappt jetzt auch :) */
    while(*str != 0)
         printf("%c",*str++);

    return 0;
}

Grüße,
Matthias

<edit>
und das String Endzeichen ist \0 du musst auf '\0' abfragen.(Da Argv eine liste von Strings ist zb "hallo\0","du\0", "0" und bei einem String das Endzeichen eben \0 ist
Ob 0 oder '\0' ist egal, da 0 == '\0'. Das letzte Element von argv ist übrigens kein Zeiger auf einen String mit einer "0", sondern ein Nullzeiger. Sonst könnte man ja die "0" nicht als Argument übergeben.
</edit>
 
Zuletzt bearbeitet:
Zurück