# [c] while-schleife mit pointer



## Pherseus (13. Dezember 2006)

```
#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?


----------



## mike4004 (13. Dezember 2006)

Hi


Probier mal 

```
#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


----------



## Matthias Reitinger (13. Dezember 2006)

Pherseus hat gesagt.:


> 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:


```
#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>


mike4004 hat gesagt.:


> 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>


----------

