Hey,
würde gern wissen,warum man hier in der while-Bedingung nicht (*str[i++]!='\0') nimmt....schließlich muss doch der Inhalt des letzten Arrayelements von str geprüft werden :S
#include <stdio.h>
char *str="Hello World!\n";
int main () {
int i=0,laenge=0;
do {
laenge++;
} while (str[i++]!='\0');
printf("Länge der Zeichenkette beträgt %d Zeichen",laenge);
getchar();
return 0;
}
Länge einer Zeichenkette
Moderator: Moderatoren
- beafraid88
- Beiträge: 99
- Registriert: Sa 25. Okt 2008, 17:34
- Wohnort: Aachen/Düsseldorf/Mönchengladbach
-
- Beiträge: 501
- Registriert: Do 19. Jun 2008, 12:12
Re: Länge einer Zeichenkette
\0 wird automatisch ans ende des strings gehangen; ist daher also stets das letzte zeichen eines strings und wird somit genauso behandelt wie die anderen zeichen des strings auch.
Re: Länge einer Zeichenkette
mit dem array offset hast du den zeiger schon referenziert:beafraid88 hat geschrieben: würde gern wissen,warum man hier in der while-Bedingung nicht (*str[i++]!='\0') nimmt
str[i++] = *(str++);
Мои пять копеек
- beafraid88
- Beiträge: 99
- Registriert: Sa 25. Okt 2008, 17:34
- Wohnort: Aachen/Düsseldorf/Mönchengladbach
Re: Länge einer Zeichenkette
hmm so ganz verstanden habe ichs noch nicht :S
hier ein bsp:
char str1 ={Hallo}; /* somit *str1[0]='H', *str1[1]='a'...*str[5]='\0' */
wenn ich jetzt den zähler i laufen lasse bis der inhalt '\0' erscheint und solange die anzahl der durchlaufenen buchstaben zähle,muss es doch heißen(jetzt mit einer for-schleife):
int counter=0,i;
for ( i=0; *str!='\0';i++) {
counter++=;
}
oder
int counter=0,i;
for ( i=0; *(str1++)='\0';i++) { /* da str1= &str1[0] (Zeiger auf das erste Element vom Array str1) */
counter++=;
}
und nicht
int counter=0,i;
for ( i=0; str!='\0';i++) {
counter++=;
}
kilian
hier ein bsp:
char str1 ={Hallo}; /* somit *str1[0]='H', *str1[1]='a'...*str[5]='\0' */
wenn ich jetzt den zähler i laufen lasse bis der inhalt '\0' erscheint und solange die anzahl der durchlaufenen buchstaben zähle,muss es doch heißen(jetzt mit einer for-schleife):
int counter=0,i;
for ( i=0; *str!='\0';i++) {
counter++=;
}
oder
int counter=0,i;
for ( i=0; *(str1++)='\0';i++) { /* da str1= &str1[0] (Zeiger auf das erste Element vom Array str1) */
counter++=;
}
und nicht
int counter=0,i;
for ( i=0; str!='\0';i++) {
counter++=;
}
kilian
Re: Länge einer Zeichenkette
Also, zum initialisieren brauchst du entweder: char *str1 = "Hallo";beafraid88 hat geschrieben: char str1 ={Hallo};
kilian
oder: char str1[20] = "Hallo";
In beiden Fällen wird ein char Zeiger str1 erzeugt, der auf die Speicherstelle des ersten Zeichen zeigt, also auf 'H'. Damit ist *str1 = 'H' bzw. str1[0] = 'H'
Also ist str1[5] = '\0', bzw *(str1+5) = '\0'
Мои пять копеек
- beafraid88
- Beiträge: 99
- Registriert: Sa 25. Okt 2008, 17:34
- Wohnort: Aachen/Düsseldorf/Mönchengladbach
Re: Länge einer Zeichenkette
ahh ok, jetzt habe ichs verstanden.
vielen dank )
vielen dank )