Anzeige:
Ergebnis 1 bis 5 von 5

Thema: [C] 0 terminieren von char.

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128

    [C] 0 terminieren von char.

    Wieso muss man das machen und wie sieht sowas aus bzw. wie terminiere ich ein char? So eine richtige Erklärung habe ich noch nicht gefunden.

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.04.2001
    Ort
    Bremen
    Beiträge
    339

    Re: [C] 0 terminieren von char.

    Original geschrieben von xmarvel
    Wieso muss man das machen und wie sieht sowas aus bzw. wie terminiere ich ein char? So eine richtige Erklärung habe ich noch nicht gefunden.
    Damit du und etliche andere Funktionen wissen wann der String vorbei ist damit man nicht über sein Ende schreiben kann(Buffer underrun). Strlen funktioniert z.B. so:
    Code:
    int strlen(char *s)
    {
        int x=0;
        while (*s != '\0')
        {
            x++;
            s++;
        }
        return x;
    }
    Solange kein '\0' auftritt (d.h. Ende des Strings) wird x um 1 erhöht

    c ya,
    Tobias

    Edit: ähem...
    Geändert von tkortkamp (08-12-2002 um 13:06 Uhr)

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: Re: [C] 0 terminieren von char.

    Original geschrieben von tkortkamp Terminieren tust du ein char* mit buf[strlen(buf)-1] = '\0';
    Ich weiß, dass du weiß, dass das nicht geht
    Aber du solltest das nicht von Leuten erwarten, die dazu eine Frage stellen.
    Die übernehmen sonst 1-zu-1 diesen Code.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    31.08.2002
    Ort
    Berlin
    Beiträge
    128
    Damit du und etliche andere Funktionen wissen wann der String vorbei ist damit man nicht über sein Ende schreiben kann(Buffer underrun)
    aha also gehe ich mal davon aus wenn ich ein char deklariere:
    char *a;
    char [] b;
    das dieser automatisch terminiert wird oder nicht ?
    Wenn nicht würde den der folgende Code funktionieren um eine 0 terminierung vorzunehmen oder kann man das garnicht so manuell tuen?
    Code:
    char *a;
    a = "TEST";
    
    sprintf(a,"%s\0",a);
    printf("%s",a);
    MFG
    xmarvel

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Original geschrieben von xmarvel
    aha also gehe ich mal davon aus wenn ich ein char deklariere:
    char *a;
    char [] b;
    das dieser automatisch terminiert wird oder nicht ?
    Wenn Du den Zeiger/Array gleich bei der Deklarierung initialisierst, dann ja. Ansonsten zeigt a erst mal ins Nirvana und b führt zu einem Komplierfehler, da du das Array nicht initialisiert hast:
    Code:
    char *a = "TEST";
    char b[] = "TEST";
    Wenn nicht würde den der folgende Code funktionieren um eine 0 terminierung vorzunehmen oder kann man das garnicht so manuell tuen?
    Hast Du mal versucht, das Programm zu kompilieren und auszuführen ?
    Nein, er würde in dem Fall nicht, da Du über das Ende des Arrays schreibst.
    Wenn, dann musst Du einen temporäres char-Array anlegen, das die zusätzlichen Zeichen noch aufnehmen kann, die Du mit sprintf reinschreiben willst:

    Code:
    char *a = "TEST";
    char buf[strlen (a) + 1];
    
    sprintf (buf, "%s\0", a);
    printf ("%s", buf);
    Gruß micha
    IRC: irc.euirc.net #tux

Lesezeichen

Berechtigungen

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