Forum: PC-Programmierung In C statt printf() in char array schreiben


von gepriesen sei das array (Gast)


Lesenswert?

Hallo

Ich habe ein C Programm welches mir einen Zeichen auf die Kommandozeile 
ausgibt, nun möchte ich anstatt auf die Kommandozeile auszugeben die 
Zeichen in ein weiteres Array schreiben.

Bisher ist es so:
1
printf("%s", charMorseAlphabet[j]);

Hier will ich die Zeichen in ein anderes Array schreiben.
zB. nach
1
char charNeu[1024];
 (Die Größe reicht sicher aus, muss also icht dynamisch angepasst 
werden)
Ich habe es schon mit snprintf versucht, bin aber nicht weitergekommen.
Bin Anfänger und würde mich über eine professionelle Lösung/Hinweis 
freuen anstatt jetzt irgendwas zusammenzukopieren.

von Dirk B. (dirkb2)


Lesenswert?

dafür gibt es sprintf

von Dirk B. (dirkb2)


Lesenswert?

gepriesen sei das array schrieb:
> Ich habe es schon mit snprintf versucht, bin aber nicht weitergekommen.

Dann zeig den Versuch, damit du deinen Fehler findest.

von Dirk B. (dirkb2)


Lesenswert?

Nebenbei: wie ist charMorseAlphabet definiert?

von Dirk B. (dirkb2)


Lesenswert?

gepriesen sei das array schrieb:
> Bisher ist es so:
> printf("%s", charMorseAlphabet[j]);

Das sollte mit strcpy besser funktionieren.

von gepriesen sei das array (Gast)


Lesenswert?

Dirk B. schrieb:
> dafür gibt es sprintf

Gut, dann war ich nicht ganz so weit weg.

Dirk B. schrieb:
> Nebenbei: wie ist charMorseAlphabet definiert?

Ein 2D Array welches mir Morsezeichen zurückgibt, funktioniert alles, 
nur gibt es halt in die Kommandozeile aus und ich würde die Morsezeichen 
gerne anders "wiederverweden".

Bisher hatte ich es so versucht:
1
char charNeu[1024], *put = charNeu;
2
3
put += sprintf(put, "%d ", charMorseAlphabet[j]);
4
strcat(put, "\n");

Was mir allerdings eine Ausnahme zurückgibt:
Ausnahmefehler bei 0x7968E63C (ucrtbased.dll) in main.exe: 0xC0000005: 
Zugriffsverletzung beim Schreiben an Position 0x009BC000

von dummschwaetzer (Gast)


Lesenswert?

heutzutage nimmt man ehr snprintf()

von gepriesen sei das array (Gast)


Lesenswert?

dummschwaetzer schrieb:
> snprintf()

Auch gut, hätte evtl. jemand diese eine code Zeile für mich, ich sitze 
da schon 3h dran...
Danke

von Dirk B. (dirkb2)


Lesenswert?

gepriesen sei das array schrieb:
> char charNeu[1024], *put = charNeu;
>
> put += sprintf(put, "%d ", charMorseAlphabet[j]);
> strcat(put, "\n");

Das %d ist doch etwas merkwürdig.

Warum nicht einfach:
1
char charNeu[1024] = "";
2
3
strcat(put, charMorseAlphabet[j]);
4
strcat(put, "\n");

snprintf hat als zweiten Parameter die maximale Länge im Zielarray.
Das müsstest du aber jetzt berechnen, da du den Anfang ja veränderst

von Dirk B. (dirkb2)


Lesenswert?

1
put += snprintf(put, 1024-(put-charNeu), "%s ", charMorseAlphabet[j]);

von gepriesen sei das array (Gast)


Lesenswert?

Dirk B. schrieb:
> Warum nicht einfach:

VIELEN DANK
Läuft jetzt...

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

gepriesen sei das array schrieb:
> char charNeu[1024], *put = charNeu;
> put += sprintf(put, "%d ", charMorseAlphabet[j]);
> strcat(put, "\n");
>
> Was mir allerdings eine Ausnahme zurückgibt:
> Ausnahmefehler bei 0x7968E63C (ucrtbased.dll) in main.exe: 0xC0000005:
> Zugriffsverletzung beim Schreiben an Position 0x009BC000

Das kann auch garnicht gehen, weil charNew nur eine Pointer ist der ins 
nirvana zeigt.
1
// wenn char charMorseAlphabet[n1][n2]; und entsprechend null-terminiert ist
2
char charNeu[1024];
3
sprintf(charNeu, "%s \n", charMorseAlphabet[j]);

Das Gedöns mit dem Rückgabewert passt gar nicht weil sprintf das 
Ergebnis sowieso in (das bei dir ungültige) put schreibt. Wenn put 
gültig wäre hättest du dann "put += put;" - meist recht sinnfrei.
Das strcat kannst du dir auch sparen und alles in eins schreiben.

von Dirk B. (dirkb2)


Lesenswert?

Irgend W. schrieb:
> Das kann auch garnicht gehen, weil charNew nur eine Pointer ist der ins
> nirvana zeigt.

charNeu ist ein Array, kein Pointer.

Irgend W. schrieb:
> Das Gedöns mit dem Rückgabewert passt gar nicht weil sprintf das
> Ergebnis sowieso in (das bei dir ungültige) put schreibt. Wenn put
> gültig wäre hättest du dann "put += put;"

Bullshit.

sprintf gibt die Anzahl der geschriebenen Zeichen zurück.

von sos (Gast)


Lesenswert?

gepriesen sei das array schrieb:
> char charNeu[1024];

das kann mit strcat in die Hose gehen.

Weise der Variable einen leeren String zu:
1
char charNeu[1024]="";

(es sei denn die Variable ist global - dann wird sie automatisch 
initialisiert.)

von Jim M. (turboj)


Lesenswert?

gepriesen sei das array schrieb:
> printf("%s", charMorseAlphabet[j]);

Sicher dass Du da %s und nicht %c haben möchtest?

von Dirk B. (dirkb2)


Lesenswert?

Jim M. schrieb:
> Sicher dass Du da %s und nicht %c haben möchtest?

Ein Morsezeichen besteht aus mehreren . und/oder - z.B. ".--"
Zudem schrieb der TO schon, dass es ein 2D-Array ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.