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

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...

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 ;)

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 
...

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.