Probem mit *char



  • Hallo zusammen,

    im Rahmen eines größerens Programmes bin ich auf das Problem gestoßen, dass in dieser Funktion das Programm abstürzt. Der Fehler tritt an der gekenzeichenten Stelle auf.

    void makelwr(char *ptr){
    	if (ptr == NULL) return;
    	while(*ptr != 0){
    		*ptr = (char)tolower((int)*ptr);     // Hier kracht es !!
    		ptr++;
    	}
    	return;
    }
    

    Für Testzwecke wird dieses Programm über das dargestellte main() aufgerüfen.

    int main(void){
    
    	char *ptr_1 = "HALLO\n";
    
    	makelwr(ptr_1);
    	printf("%s", ptr_1);
    
    	return(0);
    }
    

    Kann mir von euch einer sagen wo mein Fehler liegt?

    p.s.: Der Prototyp von makelwr(char *ptr) ist verbindlich und "DARF" nicht verändert werden. Ist für SharedLibrary welche def. Schnittstellen braucht. Somit muss der Fehler in der Funktion makelwr() behoben werden.

    p.s.: Wenn ich den String von prt_1 zur Laufzeit über ein malloc hole, dann arbeitet das Programm gemäß seinen Vorgaben. Aber das kann ja nicht die Lösung sein.
    Sage schon mal Danke.



  • char *ptr_1 = "HALLO\n";
    

    Das ist ein Stringliteral auf welches du nicht schreibend zugreifen darfst. Die einfache Lösung:

    char ptr_1[] = "HALLO\n";
    

    Und schalt bitte bb-Code an wenn du die [cpp]-Tags verwendest 😉


Anmelden zum Antworten