Problem mit char* (inkonsistenz)



  • Hallo!

    Ich wandle folgendermaßen int in char* um:

    settings[i].value = itoa(intResult, str, 10);
    

    printf gibt mir den richtigen Wert (50) in der Console aus:

    printf("\nVALUE: %s", settings[i].value);
    

    Danach wir das Array an die main zurückgegeben (immer noch 50) und von dort in eine weitere Function übergeben.

    In dieser Funktion "ändert" sich plötzlich der String:

    printf("\nTEST 1: %s;%i", settings[15].value, strlen(settings[15].value));
    printf("\nTEST 2: %s;%i", settings[15].value, strlen(settings[15].value));
    

    Ausgegeben wird:
    TEST 1: 50;2
    TEST 2: ý³↑;3

    Das heißt das char* verändert sich irgendwie zwischen diesen beiden Outputs und ich habe keine Ahnung warum?

    Any ideas?

    Thanks in advance!



  • Das heißt das char* verändert sich irgendwie zwischen diesen beiden Outputs und ich habe keine Ahnung warum?

    Ich auch nicht, aber ich weiß auch nicht was zwischen den beiden Outputs passiert.

    Und Du wirst darauf auch keine Antwort bekommen (können).
    Sieh Dir mal die Regeln zum Posten im Forum an.



  • Zeig mal kompletten Code. Oder wenn es zuviel ist, bastele ein Minimalbeispiel zusammen, dass den Fehler aufweist.



  • kaljak schrieb:

    Ich wandle folgendermaßen int in char* um:

    Ist dir klar, dass itoa immer sein zweites Argument zurückgibt? Was ist str?

    kaljak schrieb:

    Danach wir das Array an die main zurückgegeben

    Was für ein Array? value kann kein Array sein.



  • Ist dir die Bedeutung der Paramter von itoa klar?
    Wo wird denn deiner Meinung nach die Zeichenkette abgelegt?

    Nebenbei hat es itoa nicht in die Standards von C geschafft.



  • kaljak schrieb:

    Danach wir das Array an die main zurückgegeben (immer noch 50) und von dort in eine weitere Function übergeben.

    Daran wirds wohl liegen. itoa definiert den Zielspeicherbereich nicht selbst, den musst du reservieren und natürlich auch entsprechend angeben.

    itoa(intResult, settings[i].value, 10);
    

Anmelden zum Antworten