Ich hab mal einen Frage,
ich wollte gerne die Variable i in char *name1 kopieren,
um Damit eine Datei zu öffnen.
vielleicht kann jemand von ihnen helfen
nfg
David schrieb:> name1="1.txt"; //so gehts
Aber auch nur weil es die Initialisierung der Variable ist, sonst musst
du strcpy bemühen.
Wenn sichergestellt ist, dass i <= 9, dann kannst du
David schrieb:> Mit strcat kann mann ja nur an Strings anhängen.> ich wollte die zeichen aber vor dem .txt einfügen.
frau macht dann das ganz tricky:
".txt" an den Zahlenstring anhängen
char Name1[20]; // Genug Platz resevieren
i = 5;
itoa(i,Name1,10);
// hier steht jetzt "1" in Name1
strcat(Name1,".txt");
// ab hier steht "1.txt" in Name1
Lukas K. schrieb:>> name1="1.txt"; //so gehts> Aber auch nur weil es die Initialisierung der Variable ist, sonst musst> du strcpy bemühen.
Das Funktioniert auch als Zuweisung, da name1 ein char* ist.
>> Wenn sichergestellt ist, dass i <= 9, dann kannst duchar *name1="n.txt";> name1[0] = i+'0';> schreiben.
Das geht in diesem Fall nicht, da das "1.txt" ein Stringliteral ist.
Und die sind i.A. schreibgeschützt.
Wenn man den Text ändern möchte, braucht man ein Array.
Man kann das ganze aber auch mit sprintf machen.
David schrieb:> sprintf( nam, "%02d%02d%02d%02d",hour,minute,day,month); //
so nicht da sprintf eine 0 am Ende schreibt und damit .txt weg ist,
warum nicht gleich
sprintf( nam, "%02d%02d%02d%02d.txt",hour,minute,day,month);
Da habe ich den Post von David glatt übersehen :-(
Walter schrieb:> sprintf( nam, "%02d%02d%02d%02d.txt",hour,minute,day,month);
Es ist besser zuerst die Werte zu nehmen, die sich am langsamsten
ändern.
Also Jahr , Monat, Tag, Stunde ...
Dann sind die Dateien auch nach den Dateinamen auf/absteigend sortiert.
DirkB schrieb:> Also Jahr , Monat, Tag, Stunde ...> Dann sind die Dateien auch nach den Dateinamen auf/absteigend sortiert.
Es gibt aber Konventionen in welcher Reihenfolge Tag/Monat/Jahr
ausgegeben werden sollen.
DirkB schrieb:> Lukas K. schrieb:>>> name1="1.txt"; //so gehts>> Aber auch nur weil es die Initialisierung der Variable ist, sonst musst>> du strcpy bemühen.>> Das Funktioniert auch als Zuweisung, da name1 ein char* ist.
Es ist ja auch eine Zuweisung und keine Initialisierung.
Helmut Lenzen schrieb:> DirkB schrieb:>> Also Jahr , Monat, Tag, Stunde ...>> Dann sind die Dateien auch nach den Dateinamen auf/absteigend sortiert.>> Es gibt aber Konventionen in welcher Reihenfolge Tag/Monat/Jahr> ausgegeben werden sollen.
Ja, und bei Dateinamen verwendet man aus obigem Grund als Konvention oft
die angegebene Reihenfolge.
David schrieb:> wie kann ich jetz die ersten 8 zeichen von datname in name1> kopieren
Das geht mit strncpy(). Aber name1 ist ein Pointer ohne reservierten
Speicher!!!
David schrieb:> So jetzt gehts,
Glaub ich nicht.
Dein Code ist voller Fehler.
Tu dir doch selber einen Gefallen und kauf dir ein C-Buch.
In der Zwischenzeit kannst du die absoluten C-String Grundlagen hier
String-Verarbeitung in C
erst mal nachlesen.
> char *name1;> char *datname=" .txt";
datname zeigt auf einen String (ein sog. String-Literal). Und diese
String ist UNVERÄNDERBAR!
Du hast kein Recht in weiterer Folge da etwas drüber zuschreiben.
Eigentlich sollte der Compiler diese Initialisierung gar nicht
akzeptieren, aber aus historischen Gründen hat man diese eigentlich
falsche Operation zugelassen.
char name1[9];
char datname[12];
sprintf( name1, "%02d%02d%02d%02d", hour, minute, day, month );
strcpy( datname, name1 );
strcat( datname, ".txt" );
Merke: Bei Strings ist es immer einfacher, sich Einzelteile zu
generieren, aus denen man dann die kompletten Teile zusammensetzt,
anstatt im Nachhinein einen kompletten String in Einzelteile zu
zerlegen. Zumindest dann, wenn man es nicht konstanten Längen der
Einzelteile zu tun hat.
Wie Karl Heinz schon geschrieben hat funktioniert es nicht, wenn man
versucht den Wert eines String Literals zu ändern.
Man muß den Template-String als Array deklarieren und initialisieren:
1
charname[]="_.txt";
2
name[0]=n+'0';
'char name[]="_.txt";' bedeutet 'deklariere "name" als array von char
mit genau der Länge die der Initialisierer hat (also 6 Zeichen inkl. 0
byte) und kopiere den Initialisierer "_.txt" in den Array'. Ersatzcode: