www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit dem Umwandeln von einem Char-Array in Char-String AtMega128


Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe das oben angeführte Problem. Und zwar möchte ich ich einfach 
aus einem Array einen String machen. Ich sitzt schon eine Ewigkeit daran 
und hab auch schon alles ausprobiert was Google hergibt :-(
Kann mir vl. jemand von euch weiterhelfen?
Vielen Dank im Vorraus!

Lg Oliver

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und in was programmierst du?

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aso sorry, in c natürlich

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du machst aus dem Array einen String, indem du in das Array hinter das 
letzte Zeichen eine '\0' schreibst. Du musst halt dafür sorgen, dass in 
dem Array immer noch Platz für dieses eine zusätzliche Zeichen ist.

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib hinten ein '\0' ran.

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Char-Array IST ein String, wo soll denn da der Unterschied sein ? 
Bloß ist der String mit einem '\0' abgeschlossen.....

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, das heißt ich kann es dann wie einen String behandeln, oder?
Vielen Dank schon mal, hab da anscheinend einiges falsch verstanden.
Aber das führt mich gleich zu einer weiteren Frage: Und zwar will ich in 
der if-Anweisung prüfen ob start eingegeben wurde, irgendwie haut das 
nicht hin und wenn ich einlesen ausgebe bekomm ich etwas undefinierbares 
über die Rs232 aus.
void main( void )
{
  USART_Init ( MYUBRR ); 
  sei();
  USART_Transmit_String("start");
  char einlesen="nein";
  

  while(1)
  {
    if(s==100)
    {  
      if(buffer=="start") einlesen="ok";
      USART_Transmit_String("empfangen");
      USART_Transmit_String(einlesen);
      s=0;
    }
  }

} 

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil du den Inhalt von Strings nicht einfach mit "==" miteinander 
vergleichen kannst (du vergleichst damit in Wirklichkeit nur die 
Adressen, wo die beiden Strings stehen).
Such nach "strcmp" und Konsorten.

PS: Und die Zuweisungen an einlesen sind auch Unsinn. einlesen ist 
nur ein einzelnes Zeichen, kein String.

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, wie ich wiedermal merke habe ich enormen Nachholbedarf! :-(
Aber vielen Dank für die schnellen Antworten, ist hier echt ein super 
Forum!

Mal sehen ob ich das hinbekomm.
lg

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm... laut internet müsste das ganze so aussehen:
void main( void )
{
  USART_Init ( MYUBRR ); 
  sei();
  USART_Transmit_String("start");
  char einlesen[5]="nein";
  

  while(1)
  {
    if(s==100)
    {  
      if(strcmp(buffer,"start") == 0) einlesen[5]="ok";
      USART_Transmit_String("empfangen");
      USART_Transmit_String(einlesen);
      s=0;
    }
  }

} 

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber einlesen wird in diesem Fall nicht geändert. Wieso bleibt mir ein 
Rätsel

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver Kra schrieb:

> aber einlesen wird in diesem Fall nicht geändert. Wieso bleibt mir ein Rätsel

Weil du nur rumprobierst. Kauf dir ein Buch:

http://www.amazon.de/Programmieren-C-ANSI-2-C-Refe...

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab sogar zwei Bücher: "Mikrocomputertechnik mit Controllern der 
Atmel AVR-RISC-Familie" und noch ein anders kleineres.
Aber leider bin ich da ein wenig im Stress und muss das nächste Woche 
alles fertig haben :-(

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> einlesen[5]="ok";

Das ist wieder Unsinn. "einlesen[5]" ist wieder kein String, sondern 
wieder nur ein einzelnes Zeichen, und zwar das gar nicht existente 6. 
Zeichen von einlesen.

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
juhu, nach langen suchen hab ich es in meinem Buch gefunden. Ist ja doch 
ganz gut so eines zu besitzen.

mit strcpy(Ziel, Quelle) funkt es einwandfrei.

Vielen Dank nochmal an euch alle!
Ich hoff ich hab jetzt mal eine Zeit keine Probleme gg

Wünsch euch ein schönes Wochenende!

Lg

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es bei einlesen immer nur um "vorgefertigte" Strings geht, reicht 
dafür auch ein simpler Pointer, dann kannst du auch mit "=" arbeiten:
char *einlesen = "nein";

einlesen = "OK";

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, und wenn man strncpy benutzt, kann man auch vermeiden über die 
maximale Länge des Zielbuffers zu schreiben.

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super, danke, jetzt hab ich ein paar Methoden, mal schauen wie es 
schneller und zuverlässiger ist. Wird vermutlich bei meinem Programm 
keinen groben unterschied machen.

lg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.