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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.