PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 Strings durch Zeiger vertauschen...



greutli
24-08-2006, 10:45
Hi

Ich übe gerade ein bissl C und will zu diesem Zweck ein kleines Programm schreiben, das 2 Strings durch Zeiger vertauscht! Zu diesem Zweck versuche ich in Arrays durch den Inkrementoperator von Zeichen zu Zeichen zu springen. Nun bereiten mir aber folgende Zeilen Kopfzerbrechen:


while(*text1){
char hilf[5];
int i=0;
hilf[i++]=*text1++;
}

Mein Compiler meldet immer wrong type argument to increment.
Doch warum? Hab ich da was zur Zeigerarithmetik falsch verstanden?

mfg
greutli

RHBaum
24-08-2006, 13:19
welchen typ hat text1 ? char nehm ich mal an ?

iterieren ueber c strings mach ich geowhnlich so:

char test[] = 'Test1234';

for(char * p1 = test; *p1; ++p1)
{

}

klappt natuerlich nur wenn der String richtig nullterminiert ist

Ciao ...

DukePyrolator
24-08-2006, 13:53
Ähm, sehe ich das richtig, dass Du i bei jedem Schleifendurchlauf wieder auf NULL zurück setzt???

panzi
24-08-2006, 13:57
Hi

Ich übe gerade ein bissl C und will zu diesem Zweck ein kleines Programm schreiben, das 2 Strings durch Zeiger vertauscht! Zu diesem Zweck versuche ich in Arrays durch den Inkrementoperator von Zeichen zu Zeichen zu springen. Nun bereiten mir aber folgende Zeilen Kopfzerbrechen:


while(*text1){
char hilf[5];
int i=0;
hilf[i++]=*text1++;
}

Mein Compiler meldet immer wrong type argument to increment.
Doch warum? Hab ich da was zur Zeigerarithmetik falsch verstanden?

mfg
greutli
Das hilf würde ich auserhalb der Schleife anlegen, sonst wirds ja bei jedem Schleifendurchlauf neu angelegt, denk ich. Und wenn du einen string kopieren willst, warum verwendest du dann nicht strcpy. Wenn es kein string ist, sondern andere daten in einen char-array, dann nimm memcpy oder memmove (alles in string.h).

Vincent Vega
26-08-2006, 23:42
hilf[i++]=*text1++;



Setz' doch bitte Mal eine Klammer um text1. Wahrscheinlich interpretiert Dein Compiler das als (*text1)++, was Du aber meinst ist *(text1++).

Über die Semantik von Deinem Code haben andere ja schon was geschrieben... ;)

Edit: Klammer korrigiert.

panzi
28-08-2006, 14:22
Setz' doch bitte Mal eine Klammer um text1. Wahrscheinlich interpretiert Dein Compiler das als (*text1)++, was Du aber meinst ist *(text1)++.

Über die Semantik von Deinem Code haben andere ja schon was geschrieben... ;)

Bist du dir sicher das *text1++ oder *(text1)++ einen unterschied macht? *text1++ oder *(text1++) oder (*text1)++ macht einen unterschied. Wen man ein atom klammert bleibt es ein atom. Warum sollte das einen Unterschied machen?

Vincent Vega
28-08-2006, 18:55
Whoops, Du hast natürlich Recht. Klammer falsch gesetzt. D'oh.