Problem mit _itoa?!?



  • Siehe C-Grundlagen für Strings: Ein C-String hat immer 1 Zeichen mehr durch abschliessend '\0'



  • *mööööp* Schonmal was von nullterminierten Strings gehört? in b[4] passt { '2', '0', '0', '2' } rein, schon klar. Aber "2002" als String passt nicht rein. Deshalb sollte b 5 Felder groß sein damit die abschließende '\0' noch mit rein passt. Woher sollte AddString sonst wohl wissen wie lang der String ist wenn nicht durch eine terminierende null.
    EDIT: Da ist mir wohl jemand zuvor gekommen. Drängler 😉 !



  • Danke für eure Hilfe, ging ja fix.

    Mastah, habe nun aus b[4] b[5] gemacht und es funktioniert. Kannst du mir dann aber vielleicht nochmal sagen wieso bei den Monaten b[2] ausreicht und ich kein b[3] brauche?!? Verwirrt mich ein wenig



  • Ich denke es funktioniert nur zufällig. bei den zahlen ab 10 gibt es probleme weil dann der Platz nicht mehr ausreicht. Vielleicht ist das byte danach auch noch von deinem Programm und zufällig eine 0. Würde ich aber ändern und mich nicht darauf verlassen.

    Am saubersten wäre es so:

    CComboBox* pCombo = static_cast<CComboBox*>(GetDlgItem(IDC_EZMONAT));
    CString str;
    for(int x = 1; x <= 12; ++x) 
    { 
      str.Format("%d", x);
      if(str.GetLength() < 2) 
        str= "0" + str; 
      pCombo->AddString(str); 
    } 
    
    pCombo = static_cast<CComboBox*>(GetDlgItem(IDC_EZJAHR)); 
    for(int y = 1950; y <= 2003; ++y) 
    { 
      str.Format("%d", y);
      pCombo->AddString(str); 
    }
    


  • Werde wenn ich mal Zeit finde deinen Code ausprobieren, vielen Dank Mastah, jedenfalls geht es ja jetzt auch schon



  • Wenn du deinen Code benutz denk bitte daran b[2] in b[3] zu ändern. Ansonsten ist die Methode mit CString::Format einfacher und sicherer 😉 .



  • Du musst wohl immer das letzte Wort haben hä? ^^

    Nagut werde deinen Tipp berücksichtigen, obwohl ich immernoch nicht weiss warum wenn es denn auch mit b[2] geht. Seis drum 🙂



  • Probier doch mal aus, ob es im Release auch noch funktioniert...



  • Damit gigi beruhigt ist und MaSTaH nicht das letzte wort hat

    hier nochmal der Hinweis von junix

    Dazu ist zu sagen, dass itoa nicht portabel ist. Also vorsicht!

    Die Compiler dieich nutze haben alle das itoa, aber es ist sinnvoll zu wissen, das es nciht Teil des
    Standards ist



  • PAD schrieb:

    Die Compiler dieich nutze haben alle das itoa, aber es ist sinnvoll zu wissen, das es nciht Teil des Standards ist

    Moooooooment 😃 . Ist CString etwa Teil des Standards oder die MFC? Wenn er sowieso keinen Wert auf Portabilität legt dann kann er (beim VC++) getrost itoa oder CString::Format benutzen. Ansonsten müsste er mit stringstreams rumhantieren. Im C++ Forum hättest du da meckern können. *letztesworthab* 😉 😃



  • :p Ich habe nicht gesagt das man es nicht benutzen soll, ich war aber früher der Auffassung das als Umkehrung von atoi ebenfalls generisch zu C gehört. Ich benutze es sogar häufig um Integer Werte binaer auszugeben. :p

    Da ich durch die Foren hier lernen mußte, das dem leider nicht so ist, wollte ich nur die Info weiterreichen.

    Ich glaube der gnu C/C++ Kompiler kennt es nicht.

    Das man sich für die MFC und CString bei einem anderen Kompiler einen Ersatz holen muß oder kann ist vielleicht ein bischen
    offensichtlicher.



  • oder hat gigi recht 😃 😃 😃 😃



  • Hehe PAD, ich glaube wir werden richtig gute Freunde ^^.

    Im Endeffekt kommt das Ding ja auch nie in nen annern Kompiler, wüsste jedenfalls nicht warum. Aber ein guter Programmierer in HTML z.B. schreibt auch nicht Websites nur für den IE sondern auch für Opera und Netscape, deshalb werd ich mal sehn was sich machen lässt. Aber ihr kennt das ja, man steht unter Zeitdruck inner Arbeit und hier und da... bleibt wohl nur zu Hause mal testen.

    matsch senks junx


Anmelden zum Antworten