Ist dieser Code ok??



  • #include <iostream>
    
    char* str = NULL;
    
    void fill()
    {
    	str = "Teststring";
    }
    
    int main()
    {
        fill();
        std::cout << str;
    }
    

    Ist das so ok oder kann der Code auch auf einigen Compilern abstürzen? Ich meine, ist es sichergestellt das der Compiler den "Teststring" als String-Literal behandelt und der String auch noch nach dem Aufruf der Funktion fill gültig ist??



  • Sollte kein Problem sein.

    MFG fsd.



  • eh??

    str erwartet eine adresse, weil es char* ist, also ein pointer auf char...

    #include <iostream> 
    #include <string>
    
    std::string str; 
    
    void fill() 
    {
        str = "Teststring"; 
    } 
    
    int main() 
    { 
        fill(); 
        std::cout << str; 
    }
    

    oder?



  • #include <iostream>
    
    char* str = NULL;
    
    void fill()
    {
        str = "Teststring";
    }
    
    int main()
    {
        fill();
        std::cout << str;
    }
    

    Hm, was ist "Teststring"?
    Sicherlich nur etwas temporäres.
    Und einen Zeiger auf etwas temporäres legen zu lassen ist ja nicht so sicher.

    #include <iostream>
    
    char* str[100];
    
    void fill()
    {
        strcpy(str, "Teststring");
    }
    
    int main()
    {
        fill();
        std::cout << str;
    }
    

    Wobei...
    Du postest hier im C++-Forum, also ist Chickenmans Antwort richtiger.

    MFG MAV



  • entwender:

    void fill(std::string & str)
    {
      str= "Testttring";
    }
    
    oder
    
    std::string fill()
    {
       return std::string("Teststring");
    }
    

    Kurz: Globale Variablen vermeiden.



  • Der Code des OP geht aber auch, obwohl "const char*" besser wäre. "char*" geht nur aus Gründen der *ekel* Abwärtskompatibilität.



  • Der Code ist okay, wenn auch nicht schön!

    str erwartet eine adresse, weil es char* ist, also ein pointer auf char...

    Ein String-Literal wird implizit in ein Pointer umgewandelt

    Hm, was ist "Teststring"?
    Sicherlich nur etwas temporäres.
    Und einen Zeiger auf etwas temporäres legen zu lassen ist ja nicht so sicher.

    String-Literale existieren während der ganzen Programm ausführung, dass sollte kein Problem sein.



  • "char*" geht nur aus Gründen der *ekel* Abwärtskompatibilität.

    Hm, denke gerade dran.
    AFAIK kann der neue g++ das nicht mehr. (Hab jetzt keine Lust zu testen. Kann ja jeder interressierte selber machen). Aber mit const char* sollte es funktionieren.

    MFG fsd.



  • fsdeveloper schrieb:

    AFAIK kann der neue g++ das nicht mehr.

    Natürlich kann er das.


Anmelden zum Antworten