Zuweisung eines Chars in einer Funktion gehr nicht



  • Hi leute, ich hab folgendes Problem: Wenn ich diesen Code:

    char * xyz(char str[]){
        str[1] = str[1] + 1;
        return str;
    }
    
    int main(){
        xyz("lol");
        return 0;
    }
    

    ausführen will crasht die Application(aber s compilen läuft ohne Probleme)... was für mich irgendwie völlig unverständlich ist. Ich hab keine Ahnung was ich falsch mache und bitte euch darum mir pls zu helfen.
    OS: WinXP SP3
    IDE: Code::Blocks
    Compiler: MinGW



  • Dein Argument ind er Funktion ist Falsch. Ein array ist nichts weiter als ein Zeiger aufs 1. Element. Demzufolge muß der Kopf so aussehen.

    char * xyz(char str*)
    


  • BeginnerXYZ schrieb:

    was für mich irgendwie völlig unverständlich ist.

    int main(){
        xyz("lol");  
        return 0;
    }
    

    "lol" ist ein Literal das von den meisten Compilern in einen Speicherbereich gelegt wird der nicht änderbar ist. Daher stürzt dein Programm bei dem Versuch ab. Compiler wie Open-Watcom tun das nicht bzw. je nach Prozessor und Betriebssystem ist das gar nicht möglich, da hättest du das Problem nicht bemerkt. Problem deshalb, weil man in Literalen nicht rumschreiben sollte.

    Abhilfe:

    int main(){
        char str2[] = "lol";
        xyz(str2);  
        return 0;
    }
    


  • Einfacher ist es, du benutzt std::string



  • Firefighter schrieb:

    Einfacher ist es, du benutzt std::string

    nö. lernen ist besser als string benutzen.



  • Schon richtig, nur würde hier der Großteil zu std::string plädieren. Klar ist lernen besser, aber dann soll er doch std::string lernen 😛



  • Firefighter schrieb:

    Schon richtig, nur würde hier der Großteil zu std::string plädieren. Klar ist lernen besser, aber dann soll er doch std::string lernen 😛

    also ich hielt den einwurf für nutzlos und genauso störend wie das ewige "void main() ist aber verboten".



  • Ok eh wir hier wieder eine Diskussion vom Zaun bricht, die mal wieder Off-Topic geht,wie in vielen anderen Threads, sag ich jetzt einfach nichts mehr dazu. Du hast deine Meinung, ich meine, sicherlich ist es richtig sich mit chars/char-Arrays rumzuschlagen, aber was ist daran falsch eine besser Lösung zu posten?
    Kannst den Thread schließen.


Anmelden zum Antworten