string als returnwert zurückgeben?



  • char *string(int x)
    {
      char *p = malloc(20);
      sprintf(p,"%d",x);
      return p;
    }
    
    int main()
    {
      int a=1;
      char *ptr;
      ptr= string(a);
      printf("%s\n",ptr);
    
     return 0;
    }
    


  • oh hätte mal die ganze Frage gelesen 😃

    @noobLolo
    du hast das free vergessen!



  • rüdiger schrieb:

    oh hätte mal die ganze Frage gelesen 😃

    @noobLolo
    du hast das free vergessen!

    ja dabei ertappe ich mich (und natürlich du mich:)) leider häufiger



  • int kann höchstens 11 Stellen haben (-1 000 000 000), also reicht 12 als Buffergröße.



  • earli schrieb:

    int kann höchstens 11 Stellen haben (-1 000 000 000), also reicht 12 als Buffergröße.

    wo hast denn das her? laut standard ist nur die mindestgröße festgelegt, im zweifelsfall einfach mal 5.2.4.2.1 durchlesen 😉



  • hatte mal sowas an den start gebracht, kpl. ob das portabel ist, denke eher nicht, da es von der INT_MAX definition abhängt 😕

    #include <stdio.h>
    #include <limits.h>
    
    #define GET_SIZE_OF_INT_L1(x) (sizeof(#x)+1)
    #define GET_SIZE_OF_INT_L2(x) GET_SIZE_OF_INT_L1(x)
    #define GET_SIZE_OF_INT() GET_SIZE_OF_INT_L2(INT_MAX)
    
    int main(void) {
    	printf("%d",GET_SIZE_OF_INT());
    	return 0;
    }
    


  • Ich gehe einfach mal davon aus, dass du da eigentlich INT_MIN gemeint hast.

    Ansonsten tut's aber auch int(0.30103 * sizeof(int) * CHAR_BIT + 2), wobei 0.30103 eine recht genaue Näherung des Logarithmus von 2 zur Basis 10 ist (Abweichung < 1e-8). +2, um Aufzurunden und das mögliche Vorzeichen zu erschlagen.



  • cool danke, da hab ich gerade gar nicht dran gedacht, kann ja keiner wissen, das der logarithmus mal wieder für eine feine lösung herhalten muß, wer hätte das gedacht 🙂

    lg lolo



  • noobLolo schrieb:

    earli schrieb:

    int kann höchstens 11 Stellen haben (-1 000 000 000), also reicht 12 als Buffergröße.

    wo hast denn das her? laut standard ist nur die mindestgröße festgelegt, im zweifelsfall einfach mal 5.2.4.2.1 durchlesen 😉

    Dann ist 20 aber auch bei 64 Bit schon zu wenig.

    63 / log2(10) + 1 = 18.96 + 1 = 20 (aufgerundet)



  • noobLolo schrieb:

    kann ja keiner wissen, das der logarithmus mal wieder für eine feine lösung herhalten muß, wer hätte das gedacht 🙂

    Was ist der Logarithmus zur Basis 2 denn bitte, wenn nicht die Länge einer Zahl im Dualsystem?



  • earli schrieb:

    noobLolo schrieb:

    kann ja keiner wissen, das der logarithmus mal wieder für eine feine lösung herhalten muß, wer hätte das gedacht 🙂

    Was ist der Logarithmus zur Basis 2 denn bitte, wenn nicht die Länge einer Zahl im Dualsystem?

    ist ja nicht jeder so ein mathe bolzen wie du, wenn du noch mehr so kniffe auf lager hast, dann immer her damit...

    earli schrieb:

    Dann ist 20 aber auch bei 64 Bit schon zu wenig.

    mag stimmen, ich tendiere dazu immer größere buffer zu verwenden werd mich da in zukunft extra konzentrieren, da ich nicht für 8086er entwickle hats mich bisher auch immer wenig gestört 😉

    lg lolo



  • noobLolo schrieb:

    cool danke, da hab ich gerade gar nicht dran gedacht, kann ja keiner wissen, das der logarithmus mal wieder für eine feine lösung herhalten muß, wer hätte das gedacht 🙂

    lg lolo

    mal wieder?
    was ist noch fein?



  • earli schrieb:

    Dann ist 20 aber auch bei 64 Bit schon zu wenig.
    63 / log2(10) + 1 = 18.96 + 1 = 20 (aufgerundet)

    Das ist aber nicht die Formel, die von seldon angegeben wurde. Die stimmt nämlich, wenn man noch das Terminierungszeichen berücksichtigt.



  • Big Brother schrieb:

    earli schrieb:

    Dann ist 20 aber auch bei 64 Bit schon zu wenig.
    63 / log2(10) + 1 = 18.96 + 1 = 20 (aufgerundet)

    Das ist aber nicht die Formel, die von seldon angegeben wurde. Die stimmt nämlich, wenn man noch das Terminierungszeichen berücksichtigt.

    Das +1 ist für das Vorzeichen. Durch das Terminierungszeichen passt es dann am Ende nicht, das kommt aber in der Formel nicht vor.



  • earli schrieb:

    Das +1 ist für das Vorzeichen. Durch das Terminierungszeichen passt es dann am Ende nicht, das kommt aber in der Formel nicht vor.

    wieso schreibst du die überhaupt hier rein. ist das gleiche in blau als wenn ich schreibe:

    char puffer[2];
    strcpy("%s", "passt nicht rein, weil zu klein");
    

    🙄


Anmelden zum Antworten