Variable kopieren

Gast #2853171
Lesenswert?

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
1
uint8_t i = 5;
2
char *name1="n.txt";
3
name1[0] = i+'0';
4

5
Fopen(name1,F_READ)!=F_OK)

so wird die Datei als 8 Leerzeichen angelegt angelegt
1
uint8_t i = 5;
2
char *name2="        .txt";
3

4
sprintf( nam, "%02d%02d%02d%02d",hour,minute,day,month);  //
5

6
name2[0] = nam[0];
7
name2[1] = nam[1];
8
name2[2] = nam[2];
9
name2[3] = nam[3];
10
name2[4] = nam[4];
11
name2[5] = nam[5];
12
name2[6] = nam[6];
13
name2[7] = nam[7];
14

15
Fopen(name2,F_READ)!=F_OK)
Gast #2853281
Lesenswert?

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 #2853317
Lesenswert?

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.
Gast #2853544
Lesenswert?

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
Lesenswert?

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

1
char *name1;
2
char *datname="        .txt";
3
sprintf( datname, "%02d%02d%02d%02d.txt",hour,minute,day,month);  //
4

5
in datname steht jetzt 01302105.text
#2854395
Lesenswert?

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.
#2854723
Lesenswert?

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
char name[]="_.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:
1
char name[6];
2
strcpy(name,"_.txt");
3
name[0]=n+'0';

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren