Anzeige:
Ergebnis 1 bis 7 von 7

Thema: 2 Strings durch Zeiger vertauschen...

  1. #1
    greutli
    Gast

    2 Strings durch Zeiger vertauschen...

    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:

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

  2. #2
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    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 ...

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.04.2005
    Beiträge
    8
    Ähm, sehe ich das richtig, dass Du i bei jedem Schleifendurchlauf wieder auf NULL zurück setzt???

  4. #4
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von greutli Beitrag anzeigen
    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:

    Code:
    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).
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.12.2005
    Beiträge
    16
    Zitat Zitat von greutli Beitrag anzeigen
    Code:
          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.
    Geändert von Vincent Vega (28-08-2006 um 18:56 Uhr)

  6. #6
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von Vincent Vega Beitrag anzeigen
    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?
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  7. #7
    Registrierter Benutzer
    Registriert seit
    23.12.2005
    Beiträge
    16
    Whoops, Du hast natürlich Recht. Klammer falsch gesetzt. D'oh.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •