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


von Oliver K. (Firma: TGM) (oliver1990)


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

von Ich (Gast)


Lesenswert?

und in was programmierst du?

von Oliver K. (Firma: TGM) (oliver1990)


Lesenswert?

aso sorry, in c natürlich

von Stefan E. (sternst)


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.

von Bernd M. (bernd_m)


Lesenswert?

Schreib hinten ein '\0' ran.

von Karlheinz D. (kdruschel)


Lesenswert?

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

von Oliver K. (Firma: TGM) (oliver1990)


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.
1
void main( void )
2
{
3
  USART_Init ( MYUBRR ); 
4
  sei();
5
  USART_Transmit_String("start");
6
  char einlesen="nein";
7
  
8
9
  while(1)
10
  {
11
    if(s==100)
12
    {  
13
      if(buffer=="start") einlesen="ok";
14
      USART_Transmit_String("empfangen");
15
      USART_Transmit_String(einlesen);
16
      s=0;
17
    }
18
  }
19
20
}

von Stefan E. (sternst)


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.

von Oliver K. (Firma: TGM) (oliver1990)


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

von Oliver K. (Firma: TGM) (oliver1990)


Lesenswert?

hmm... laut internet müsste das ganze so aussehen:
1
void main( void )
2
{
3
  USART_Init ( MYUBRR ); 
4
  sei();
5
  USART_Transmit_String("start");
6
  char einlesen[5]="nein";
7
  
8
9
  while(1)
10
  {
11
    if(s==100)
12
    {  
13
      if(strcmp(buffer,"start") == 0) einlesen[5]="ok";
14
      USART_Transmit_String("empfangen");
15
      USART_Transmit_String(einlesen);
16
      s=0;
17
    }
18
  }
19
20
}

von Oliver K. (Firma: TGM) (oliver1990)


Lesenswert?

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

von P. S. (Gast)


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-Reference/dp/3446154973/ref=sr_1_2?ie=UTF8&s=books&qid=1271495422&sr=8-2

von Oliver K. (Firma: TGM) (oliver1990)


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 :-(

von Stefan E. (sternst)


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.

von Oliver K. (Firma: TGM) (oliver1990)


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

von Stefan E. (sternst)


Lesenswert?

Wenn es bei einlesen immer nur um "vorgefertigte" Strings geht, reicht 
dafür auch ein simpler Pointer, dann kannst du auch mit "=" arbeiten:
1
char *einlesen = "nein";
2
3
einlesen = "OK";

von Bernd M. (bernd_m)


Lesenswert?

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

von Oliver K. (Firma: TGM) (oliver1990)


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

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.