SER_GetChar() liefert Dir nur ein einzelnes Zeichen. Du musst die
Zeichen in einer Schleife lesen und nacheinander im Array text
speichern, bis das letzte Zeichen ('\n') kommt. Danach muss noch ein
'\0' angefügt werden, um den String zu terminieren. Außerdem solltest Du
darauf achten, dass nicht über die Array-Grenze (40 Zeichen) hinaus
geschrieben wird.
Danach kannst Du text auf dem LCD ausgeben, wie Du es schon dort stehen
hast.
Richard schrieb:> ok das mag keil nicht, weil Keil kein string kann in C
Nö. Nicht Keil.
In C gibt es schlicht und ergreifend keinen 'string' Datentyp.
String-Verarbeitung in C
Wenn du weiter in C programmieren willst, kommst du um Literatur nicht
herum.
Mit deinen C# bzw. Java Kentnissen wirst du ansonsten schnell auf die
Schnauze fallen. Vieles ist ähnlich, aber doch ganz anders. Und nur weil
etwas syntaxmässig einigermassen gleich aussieht, heißt das nicht, dass
es auch gleich behandelt wird.,
>//sollange bis "\n" in einem array element auftaucht
8
>while(myCharArray[i]!='\n')
9
>{
10
>mytext[j]=myCharArray[i];
11
>j++;
12
>i++;
13
>}
14
>
15
>returnmytext;
16
>
17
>
>> main.c(119): error: #29: expected an expression
Eine Information fehlt noch:
welches ist die Zeile 119?
(markier die Zeile immer im Code)
Auf Anhieb sehe ich das jetzt nichts fehlerhaftes.
>> warum?
Karl Heinz Buchegger schrieb:> Auf Anhieb sehe ich das jetzt nichts fehlerhaftes.>>>>> warum?
Das passt jetzt zwar nicht zur Fehlermeldung, aber:
1
charchar2string(char*myCharArray)
(achte auf den Return Typ)
1
charmytext[20];
und
1
returnmytext;
das passt nicht zusammen. Die Funktion sagt: Ich gebe einen einzelnen
Character zurück. mytext ist aber kein einzelner Character. mytext ist
ein Array!
(und nein, du kannst auch nicht das Array zurückgeben. Studier den Link,
den ich dir gegeben habe. Gleich nachdem du dir bei Amazon einen
Kernighan&Ritchie, vorzugsweise in der englischen Originalversion
gekauft hast)
ja 121 wäre die Zeile return mytext
wenn ich aber return mytext[] draus mache wie es ja eigentlich sein
soll,
dann meckert er, "expected an expression" für return mytext[].
Das ist doch aber ein Ausdruck oder?
Richard schrieb:> ja 121 wäre die Zeile return mytext>> wenn ich aber return mytext[] draus mache wie es ja eigentlich sein> soll,> dann meckert er, "expected an expression" für return mytext[].> Das ist doch aber ein Ausdruck oder?
<frustriert>
Ich such dir doch nicht umsonst den Link raus, nur damit du dann nicht
draufklickst und ein paar Seiten nicht lesen musst.
Steht alles dort.
Aber lesen musst du schon selber.
String Verarbeitung in C ist nicht so einfach, wie du denkst.
Richard schrieb:> dank deinem Link, den ich erst jetzt bemerkt habe:> --> return *mytext;>> jetzt gehts :D
<Homer Mode>
N E I I I I N
</Homer Mode>
Lies alles! Von oben bis unten!
Dann erfährst du auch, warum es eben NICHT funktioniert. Selbst wenn es
jetzt momentan so aussieht als ob.
so gehts, nur erhalte ich am ende auf dem Display immer ein Zeichen das
so ausschaut wie ein schwarz ausgefülltes rechteck []. Wenn ich 7 draus
mache ist das Zeichen am Anfang
bsp.:
70.18F[] //wenn text2, 8
[]70.18 //text2, 7 => "F" fehlt aber dafür blockzeichen am Anfang
Hier mein code:
Richard schrieb:> text2 ist definiert als char text2[10];>> Im debugger ist das ungewollte symbol/zeichen ein 0x0D ""
0x0D ist ein Linefeed. Also ein Steuerzeichen. Kannst du ausfiltern. Die
gets Funktion kann dieses Zeichen einfach ignorieren und nicht im String
ablegen.
Ist fürs erste die einfachste Variante.
Dann solltest du deinen Aufruf so gestalten
1
chartext2[10];
2
3
uart_gets(text2,sizeof(*text2));
an der Stelle, an der du tatsächlich das Array noch als Array 'siehst',
kannst du mit sizeof die Arraygröße feststellen. Es bringt nichts, wenn
du gets anlügst. Wenn dein Array 10 Positionen groß ist und du daher
einen String der Länge 9 da reinbringst, dann sag das auch der Funktion,
damit sie den vorhandenen Platz maximal ausnutzen kann. Das heißt ja
nicht, dass der String dann auch eine strlen von 9 haben MUSS. Das heißt
ja nur, das er das KANN. Er kann auch kürzer sein (deswegen gibt es ja
das \0 Zeichen)