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(); anpassen3. 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....