Unterschiedliche Werteausgabe



  • Heyhey,
    kurze Frage, wieso gibt mit strlen 10 und x 11 als Feldlänge für string aus?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(){
    
    char string[] = " Schwullo ";
    
    int lenght = strlen(string);
    int x = sizeof(string) / sizeof(char);
    printf("%d  oder   %d\n", lenght, x);    
    
    system("Pause");
    return 0;
    }
    


  • Weil dein String noch eine terminierende 0 am Ende hat, die von strlen nicht gezählt wird.



  • yo hab ich auch grad gecheckt, dachte immer das wäre genau andersrum ^^

    danke 🙂



  • INoFool schrieb:

    int x = sizeof(string) / sizeof(char);
    

    wird sizeof nicht zur compile zeit umgesetzt, sollte sich die string länge ändern, würde in x immer das gleiche stehen? oder ändert sich das dann auch so wie strlen?



  • string kann sich nicht ändern. Und wenn es sich doch ändern könnte würde string weiterhin genauso viel Speicher belegen wie vorher. sizeof gibt die Anzahl der Bytes die eine Variable eines Datentyps belegt zurück, unabhängig vom Wert der Variablen, und der Datentyp kann sich nie ändern.

    Aber ich musste das auch erst nochmal ausprobieren 😉

    Obwohl, es gibt doch so lustige Compileranweisungen mit denen man Datentypen bearbeiten kann. Vielleicht kann man ja mitten im Quellcode int von 4 auf 8 Bytes umstellen und es kommen unterschiedliche Werte für sizeof(int) raus, je nachdem ob es vor oder nach der Umstellung kommt. Aber wahrscheinlich geht das garnicht.


Anmelden zum Antworten