kostenloser Webspace werbefrei: lima-city


Typumwandlung int->char

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Ich probiere gerade ein bisschen mit der WIN-API herum und wollte mit TextOut() eine Zahl(int) ausgeben, obwohl man damit eigentlich char-Arrays ausgibt. Also habe ich eine Typumwandlung von int nach char gemacht.
    int zahl = 12;
    char Text[100];
    sprintf(Text,"Zahl: %d",zahl);
    TextOut(hDC,0,0,Text,sizeof(Text)-1);

    Dann werden aber leider die leeren Elemente des char-Arrays mit irgendwelchen Zeichen aufgefüllt. Wie kann ich das verhindern?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Also, sizeof() ist eine "Funktion", die bereits zur Compilezeit aufgerufen wird. Die dient dazu die Größe von Datentypen(!) zu ermitteln. Für deine Bedürfnisse dürfte die Funktion
    #include <cstring>
    size_t strlen( char *str );


    besser geeignet sein.


    Ich probiere gerade ein bisschen mit der WIN-API herum

    Soll ungesund sein, habe ich mir sagen lassen ;)
  4. mal neben bei: gibt doch schon so eine C++ Funktion. Nennt sich itoa glaube ich:

    http://www.goblack.de/desy/sc12chip/c/bibliothek/itoa.html
  5. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Also, sizeof() ist eine 'Funktion', die bereits zur Compilezeit aufgerufen wird. Die dient dazu die Größe von Datentypen(!) zu ermitteln. Für deine Bedürfnisse dürfte die Funktion
    #include <cstring>
    size_t strlen( char *str );


    besser geeignet sein.


    Laut pronix.linuxdelta.de ist der Code in Ordnung.
    Ich probiere gerade ein bisschen mit der WIN-API herum

    Soll ungesund sein, habe ich mir sagen lassen ;)

    Das wird sich zeigen;)

  6. Laut pronix.linuxdelta.de ist der Code in Ordnung.

    Genauer Link?

    Ich habe es jedenfalls so gemacht:
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
            int zahl = 12; 
            char Text[100];
            sprintf(Text,"Zahl: %d",zahl);
            printf("Der Text: %s\\\\nhat %d Zeichen",Text,strlen(Text));
    }

    Wobei ich natürlich auf die WinAPI verzichtet habe und statt dessen ein printf für die Ausgabe benutzt habe ;)

    Dein Problem ist doch, dass er nicht nur den String an sich ausgibt, sondern auch noch den ganzen anderen, zufälligen Kram, richtig? strlen() müsste hier eigentlich insoweit Abhilfe Schaffen, indem es die erste 0 im Char-Array raussucht und damit die Länge des eigentlichen Strings bestimmt.
    Falls es dir nur darum geht, dass du in deinem Char-Array nur 0en hast, dann musst du diese 0en selber eintragen:
    int bigarray[1000] = { 0 };


    edit: Lima killt mal wieder die Backslashes :(

    Beitrag geändert: 21.10.2008 18:52:46 von bladehunter


    Beitrag geändert: 21.10.2008 18:53:04 von bladehunter


    Beitrag geändert: 21.10.2008 18:53:17 von bladehunter
  7. Autor dieses Themas

    progger

    Kostenloser Webspace von progger

    progger hat kostenlosen Webspace.

    Der genaue Link lautet:
    http://pronix.linuxdelta.de/C/win32/win32_6.shtml#3
    Hurra! Es funktioniert mit strlen(). Danke an bladehunter :thumb:

    Das Resultat von itoa() unterscheidet sich für mich nicht von dem von sprintf(). Gibt es noch andere Vorschläge?

    Bitte keine Doppelposts!


    Beitrag geändert: 21.10.2008 19:27:47 von adrians
  8. Noch eine Ergänzung, warum bei pronix sizeof() in Ordnung war:

    Schnipp:
    char szPuffer[] = "Ein Teststring";


    Schnapp:
    TextOut(hDC, 0, 0, szPuffer, sizeof(szPuffer)-1);


    In diesem Fall steht zur Compilezeit bereits fest, wie groß der String sein wird. Das Array szPuffer bekommt keine direkte Größenangabe, aber dafür den String, den es speichern soll. Und anhand der Länge des Strings wird dann auch direkt die Größe von szPuffer festgelegt. Entsprechend ist es dann zur Compilezeit auch kein Problem ein sizeof() zu machen.
    Nichtsdestrotrotz ermittelt sizeof() nicht die Länge des Strings, sondern die Größe des Arrays, in dem der String gespeichert ist!


    Und noch ein Nachtrag (Danke an Alopex): Statt sprintf() sollte man natürlich snprintf() benutzen, um Buffer-Overflows zu verhindern.
    http://openbook.galileocomputing.de/c_von_a_bis_z/c_025_000.htm#RxxobKap02500004002C271F04F1DE

    Beitrag geändert: 23.10.2008 8:11:42 von bladehunter
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!