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
und in was programmierst du?
aso sorry, in c natürlich
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.
Schreib hinten ein '\0' ran.
Ein Char-Array IST ein String, wo soll denn da der Unterschied sein ? Bloß ist der String mit einem '\0' abgeschlossen.....
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 | }
|
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.
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
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 | }
|
aber einlesen wird in diesem Fall nicht geändert. Wieso bleibt mir ein Rätsel
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
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 :-(
> 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.
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
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"; |
Ja, und wenn man strncpy benutzt, kann man auch vermeiden über die maximale Länge des Zielbuffers zu schreiben.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.