In C statt printf() in char array schreiben

Gast #6686713
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.
Gast #6686736
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
#6686760
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
(Firma: egal) #6686797
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.
#6686822
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.

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