Forum: Mikrocontroller und Digitale Elektronik Zeichen aus char Array in neuem char Array speichern


von Rafael E. (Firma: Student FHNW) (runcross)


Lesenswert?

Guten Abend

Ich schreibe momentan an einem C-code für meinen ATMEGA2561. für meine 
Frage konnte ich online nichts befriedigendes finden [vielleicht war ich 
auch zu doof].

Nun zu meiner Frage: Ich habe zwei char Arrays und will nun einzelne 
Zeichen aus dem einen Array in das andere Array übertragen. Hier mein 
Code:

#include <stdio.h>

int main(void){

  char txText[120] = "radio tx ";
  char dBuffer[20] = "35929910576AB235";

  for(int i = 0; i==10; i++){
    txText[9+i] = dBuffer[i];

}

  printf("\n%s", txText);

  return 0;

}

Ich habe den Code hier http://ideone.com/8zIU4r und bekomme als ausgabe 
nur "radio tx ". Wo liegt mein Problem das ich einzelne Zeichen nicht in 
einer for-Schleife einzeln übergeben kann (zum beispiel die ersten 10 
zeichen)

Vielen Dank für die Antworten.
Rafael

: Verschoben durch User
von Tom W. (nericoh)


Lesenswert?

Und was ist jetzt die Frage? :O

von Peter II (Gast)


Lesenswert?

Rafael E. schrieb:
> Nun zu meiner Frage:

ich sehe keine Frage.

aber das würde ich mir noch mal genauer anschauen
1
for(int i = 0; i==10; i++){

von Tom W. (nericoh)


Lesenswert?

stimme Peter zu... so wie es da steht wird die Schleife niemals 
ausgeführt...

von Rafael E. (Firma: Student FHNW) (runcross)


Lesenswert?

Ups, dieser Fehler ist peinlich. Sollte ein Ungleichheitszeichen sein. 
Aufgrund eines so banalen Fehler habe ich jetzt 30min zeit 
verschwendet...

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Rafael E. schrieb:
> Ups, dieser Fehler ist peinlich.

sind aber noch mehr drin, String sollte am ende eine 0 haben.

von Rafael E. (Firma: Student FHNW) (runcross)


Lesenswert?

Für mein Lora´Modul das ich mit meinem MCU anspreche brauche ich am 
Schluss ein "\r\n" ;) Vergessen hätte ich dies nicht, wollte nur rasch 
mein code überprüfen mit beispiel arrays, aber der andere Fehler ist 
recht doof. Nochmals danke ;)

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Rafael E. schrieb:
> Für mein Lora´Modul das ich mit meinem MCU anspreche brauche ich am
> Schluss ein "\r\n" ;) Vergessen hätte ich dies nicht aber der andere
> Fehler ist recht doof. Nochmals danke ;)

auch dann brauchst du noch  eine 0 am ende.

von Dirk B. (dirkb2)


Lesenswert?

Dann muss eben nach dem "\r\n" die 0 an den String.

Ohne den Stringterminator kannst du die C-Standardfunktionen für Strings 
nicht benutzen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Rafael E. schrieb:
> Guten Abend
>
> Ich schreibe momentan an einem C-code für meinen ATMEGA2561. für meine
> Frage konnte ich online nichts befriedigendes finden [vielleicht war ich
> auch zu doof].
>
> Nun zu meiner Frage: Ich habe zwei char Arrays und will nun einzelne
> Zeichen aus dem einen Array in das andere Array übertragen. Hier mein
> Code:
>
> #include <stdio.h>
>
> int main(void){
>
>   char txText[120] = "radio tx ";
>   char dBuffer[20] = "35929910576AB235";
>
>   for(int i = 0; i==10; i++){
>     txText[9+i] = dBuffer[i];
>
> }
>
>   printf("\n%s", txText);
>
>   return 0;
>
> }
>
> Ich habe den Code hier http://ideone.com/8zIU4r und bekomme als ausgabe
> nur "radio tx ". Wo liegt mein Problem das ich einzelne Zeichen nicht in
> einer for-Schleife einzeln übergeben kann (zum beispiel die ersten 10
> zeichen)
>
> Vielen Dank für die Antworten.
> Rafael

Damit solche (einfachen) Fehler nicht passieren, sollte man statt 
expliziter Schleifen lieber fertige Algorithmen benutzen:

http://en.cppreference.com/w/cpp/string/byte/strcat

Noch besser wäre - auch wenn man sonst gar nicht OOP macht, sich 
wenigstens eine gescheite StringBuffer-Klasse bzw. template zu 
schreiben. Dann gehört so etwas auch ein für alle mal der Geschichte an 
...

: Bearbeitet durch User
von Stephan C. (stephan_c)


Lesenswert?

Ich hab da mal eine grundsätzliche Frage.
Muß man in C nicht auch den ursprünglichen Pointer speichern und am Ende 
der printf-Funktion übergeben oder ist das hier nicht nötig?

von Wilhelm M. (wimalopaan)


Lesenswert?

Stephan C. schrieb:
> Ich hab da mal eine grundsätzliche Frage.
> Muß man in C nicht auch den ursprünglichen Pointer speichern und am Ende
> der printf-Funktion übergeben oder ist das hier nicht nötig?

Worauf bezieht sich das?

von Peter II (Gast)


Lesenswert?

Stephan C. schrieb:
> Muß man in C nicht auch den ursprünglichen Pointer speichern und am Ende
> der printf-Funktion übergeben oder ist das hier nicht nötig?

was meinst du damit?

von Stephan C. (stephan_c)


Lesenswert?

Schon gut. Ich hab in der Vergangenheit einmal Strings mithilfe von 
char-Pointern realisiert. Da musste ich immer den ursprünglichen 
Pointer-Wert zwischenspeichern, um an die Stelle wieder zurückzukommen.

von Harald N. (Gast)


Lesenswert?

Peter II schrieb:
> Rafael E. schrieb:
>> Ups, dieser Fehler ist peinlich.
>
> sind aber noch mehr drin, String sollte am ende eine 0 haben.

Seit wann muss man in C die \0 selber anhängen? Abgesehen davon, dass es 
ja \0 und nicht 0 (und auch nicht '0') ist.

von Michael .. (gismi)


Lesenswert?

Harald N. schrieb:
> Seit wann muss man in C die \0 selber anhängen?

Schon immer, wenn man das char-Array als Array behandelt und nicht als 
String. In der Schleife überschreibt er das '\0' aus der Initialisierung 
von txText und setzt kein eigenes.

Harald N. schrieb:
> Abgesehen davon, dass es
> ja \0 und nicht 0 (und auch nicht '0') ist.
und was ist der dezimale Wert des Character '\0'? :-)

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.