Gast
#2853145
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
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
|
Anzeige
|
Variable kopieren
Gast
#2853145
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
schreiben. Wenn nicht, itoa und strcat. String-Verarbeitung in C
Gast
#2853171
Mit strcat kann mann ja nur an Strings anhängen. ich wollte die zeichen aber vor dem .txt einfügen. so wird die Datei als N angelegt
so wird die Datei als 8 Leerzeichen angelegt angelegt
Gast
#2853267
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
Gast
#2853281
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.
Gast
#2853290
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);
Gast
#2853317
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.
Gast
#2853544
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.
Gast
#2854385
So jetzt gehts, aber wie kann ich jetz die ersten 8 zeichen von datname in name1 kopieren damit nacher wieder in name1 01302105.text mfg
Gast
#2854390
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:
'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:
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|