Strings ersetzen?



  • Hallo,

    wie ersetze ich eigentlich einen String?

    Bsp.:

    char *meinstring="hallo";

    Wie kann ich den literalen String "hallo" ersetzen _ohne_ (!) auf die einzelnen
    Chars beispielsweise in einer Schleife zu ersetzen?
    Gibt es da in C eine einfache Möglichkeit?

    Danke! 😉



  • char buffer[]="Hallo";
    strcpy(buffer,"Welt");

    aber aufpassen, dass du nicht ueber das ende von buffer hinausschreibst!



  • Ok. Danke.

    [Edit]
    Habs mal versucht.
    Wieso funktioniert:

    #include <stdio.h>
    
    int main()
    {
       char str[]="hallo";
    
       strcpy(str,"test");
       puts(str);
       return 0;
    }
    

    und

    #include <stdio.h>
    
    int main()
    {
       char *str="hallo";
    
       strcpy(str,"test");
       puts(str);
    
       return 0;
    }
    

    endet mit einem Speicherzugriffsfehler?
    Von der Sache her ist char str[]="hallo" doch das gleiche wie char *str="hallo"?!

    [/Edit]

    [ Dieser Beitrag wurde am 29.11.2002 um 19:55 Uhr von an0nym editiert. ]



  • Original erstellt von an0nym:
    *Von der Sache her ist char str[]="hallo" doch das gleiche wie char str="hallo"?!

    Nein. Ein Array ist kein Zeiger.



  • Original erstellt von Daniel E.:
    Nein. Ein Array ist kein Zeiger.

    Ja, dass weiß ich auch. str ohne [] ist aber ein Zeiger auf das 1. Feld des Arrays. So meinte ich dass.



  • die "" bezeichnen in c eine konstante.
    char *str="hallo"; weist also str die adresse des konstanten "hallo" zu, die einzelnen characters koennen nicht geaendert werden.
    char str[]="hallo"; speichert "hallo" in str, die einzelnen characters koennen also geaendert werden.



  • Es handelt sich bei char *str="Hallo" doch um eine literale Konstante?
    Deswegen geht das doch nicht oder?

    In meinem C - Buch steht:
    Eine literale Konstante ist ein Wert, den man direkt im Quellcode angibt. D.h. man schreibt den Wert an allen Stellen, wo er vorkommt, "wörtlich" (literal) aus:
    int zaehler = 20;
    float steuer_satz = 0.28 .

    Ok. Nun ist bei mir int zaehler = 20 aber nichts anderes als eine int Variable der ich den Wert 20 zuweise. Diese 20 kann ich doch aber auch ändern, obwohl es eine "literale Konstante" sein soll, wieso geht das dann mit dem String nicht???



  • Nein, die int-Variable enthält eine Kopie des Literals. Der char-Zeiger stellt lediglich einen Verweis auf sein Literal dar.

    Literale skalarer Typen stehen im Normalfall aber auch zur Laufzeit nicht mehr zur Verfügung, das heißt, du kannst ihre Adresse nicht bestimmen. Es gibt keine analoge Form zu

    char *str = "Hallo";
    

    die dann vielleicht so

    int *zahl = &42;
    

    aussähe 🙂

    Wenn man das weiter auswalzt muß man über First-Class-Entities und maschinenorientierte vs. problemorientierte Programmierung diskutieren, aber das führt hier wohl zu weit.



  • Danke! Jetzt versteh ich das ganze!:D


Anmelden zum Antworten