int -> string (char*)



  • danke für den hinweis... hab 4 jahre lang c/c++/vc6 in der schule gelernt das ist aber schon etwas länger her und programmiere seit längerem mit delphi und c#, daher kann ich mich nicht mehr an alle (c/c++) einzelheiten erinnern.

    char* str="versuch";
    

    kann man sehr wohl verwenden, weil ich einen statischen string zuweise und der kompiler somit weiss, dass er in diesem fall für 7 zeichen platz im speicher reservieren muss.... aber daran scheitert das ganze ja nicht...

    mein hauptproblem liegt ganz woanders... nämlich bei der konvertiertung von int (tag,monat,(jahr)) in char* damit ich endlich meinen dateinamen verwenden kann!

    also bitte mit zucker oben drauf, mit welcher funktion kann ich einen int in string umwandeln... atoi ist string -> int, wenn ich mich nicht irre...

    danke im voraus!



  • Mit der Funktion, die du oben schon mal verwendet hast. sprintf();

    int i=2005;
    char year[5];
    
    sprintf(year,"%d",i);
    

    P.S. In deinem ersten Beispiel hast du zwei pointer definiert und ihnen dynamisch zur Laufzeit einen Inhalt zugewiesen.

    char *str_time;
    
    sprintf(str_time,"%d",time(NULL));
    
    printf("%s", time);
    

    Das geht doch nicht 🙂 😃 😉 .



  • char str_day[2];
    char str_month[2];
    
    sprintf(str_day,"%s",ptm->tm_mday);
    sprintf(str_month,"%s",ptm->tm_mon);
    

    wenn ich es auf diese konvertiere bekomme ich dann bekomme ich aber immer folgende fehlermeldung und mein programm wird beendet:

    ScanDocument.cpp:46: Warnung: Format-Argument ist kein Zeiger (Argument 3)
    ScanDocument.cpp:47: Warnung: Format-Argument ist kein Zeiger (Argument 3)

    kompiliere das ganze mit gcc unter linux aber das sollte eigentlich keinen unterschied machen....



  • von welchem datentyp ist denn das 3. Argument.
    Wenn´s kein char ist, dann musst du halt sprintf(); anpassen 🙄



  • ....



  • chris1908 schrieb:

    char* str="versuch";
    

    kann man sehr wohl verwenden, weil ich einen statischen string zuweise und der kompiler somit weiss, dass er in diesem fall für 7 zeichen platz im speicher reservieren muss.... aber daran scheitert das ganze ja nicht...

    Der compiler muss 7 + '\0' = 8 zeichen reservieren ⚠



  • /bin/bash0R schrieb:

    Der compiler muss 7 + '\0' = 8 zeichen reservieren

    fängt ein array nicht bei 0 an? 0-6 sind die zeichen und es 7 ist für '\0'... kann mich natürlich irren...

    /bin/bash0R schrieb:

    von welchem datentyp ist denn das 3. Argument.
    Wenn´s kein char ist, dann musst du halt sprintf(); anpassen 🙄

    3. Argument ist ein int

    wie kann ich sprintf(); anpassen?



  • chris1908 schrieb:

    fängt ein array nicht bei 0 an? 0-6 sind die zeichen und es 7 ist für '\0'... kann mich natürlich irren...

    das ist korrekt, die indizes gehen von 0-6, doch in deinem beispiel hattest du das wort "versuch", das sind 7 buchstaben und ein '\0', deshalb muss der compiler bei der deklaration 8 zeichen reservieren.
    char string[8] geht von string[0]-string[7]!

    chris1908 schrieb:

    wie kann ich sprintf(); anpassen?

    sprintf(str_day,"%d",ptm->tm_mday);
    


  • chris1908 schrieb:

    char* str="versuch";
    

    kann man sehr wohl verwenden, weil ich einen statischen string zuweise und der kompiler somit weiss, dass er in diesem fall für 7 zeichen platz im speicher reservieren muss

    Du sprichst hier von String-Literal, und wie /bin/bash0R schon sagte, dein Compiler wird hier 8 Zeichen reservieren. 7 Inhalt + 1 abschliessendes Nullzeichen. Zudem solltest du beim Arbeiten mit Literalen aufpassen. Diese sind read-only, deshalb solltest du es besser so machen

    const char* str="versuch";
    

    Dann gibts hinterher keine Überraschungen.

    chris1908 schrieb:

    char str_day[2];
    char str_month[2];
    

    Abschliessende Nullzeichen beachten, jeweils 2 Zeichen dürften für str_day und str_month nicht ausreichen.



  • thx, funktioniert!

    ja, meine c-kenntnisse sind leider schon ziemlich eingerostet.... 🙄


Anmelden zum Antworten