Hallo, ich versuche in C ein String-array zu basteln. Da mache ich wohl Fehler, denn das will nicht funktionieren: int main( void ) { lcd_init(0); lcd_init(1); lcd_init(2); lcd_init(3); // LCD: 40*4 clearLCDline(0,0); clearLCDline(1,0); clearLCDline(2,0); clearLCDline(3,0); char line_0[50] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; lcd_print_at ( line_0, 0, 0 ); _delay_ms(1000); // bis hier funktioniert alles bestens // ab hier funktioniert nichts, nur leere Zeilen char line[50][4]; line[50][0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; line[50][1] = "A quick brown fox jumps over the lazydog"; line[50][2] = "1234567890123456789012345678901234567890"; line[50][3] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"; lcd_print_at ( line[0], 0, 0 ); lcd_print_at ( line[1], 0, 1 ); lcd_print_at ( line[2], 0, 2 ); lcd_print_at ( line[3], 0, 3 ); } Vielen Dank, Thomas
Thomas R schrieb: > char line[50][4]; > line[50][0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; > line[50][1] = "A quick brown fox jumps over the lazydog"; > line[50][2] = "1234567890123456789012345678901234567890"; > line[50][3] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"; Das geht so nicht... wenn dann wenigstens:
1 | char line[50][4][40]; |
2 | |
3 | |
4 | line[50][0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; |
5 | line[50][1] = "A quick brown fox jumps over the lazydog"; |
6 | line[50][2] = "1234567890123456789012345678901234567890"; |
7 | line[50][3] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"; |
8 | |
9 | lcd_print_at ( line[50][0], 0, 0 ); |
10 | lcd_print_at ( line[50][1], 0, 1 ); |
11 | lcd_print_at ( line[50][2], 0, 2 ); |
12 | lcd_print_at ( line[50][3], 0, 3 ); |
Oooooder, so wie ich denke du das eigentlich wolltest: ;-)
1 | char line[4][50]; |
2 | |
3 | |
4 | line[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; |
5 | line[1] = "A quick brown fox jumps over the lazydog"; |
6 | line[2] = "1234567890123456789012345678901234567890"; |
7 | line[3] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"; |
8 | |
9 | lcd_print_at ( line[0], 0, 0 ); |
10 | lcd_print_at ( line[1], 0, 1 ); |
11 | lcd_print_at ( line[2], 0, 2 ); |
12 | lcd_print_at ( line[3], 0, 3 ); |
Normalerweise müsste aber der Compiler bei deinem Konstrukt eine Warnung werfen.
Thomas R schrieb: > line[50][0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; Also so kannst du generell keinen "String" irgendwo reinschreiben. "xy" ist ein pointer, also musst du strcpy verwenden. Ich würde es so machen:
1 | char lines[4][50] = { "abc123", "zweite zeile", "dritte", "vierte" }; |
2 | |
3 | //und wenn du später neue Werte reinschreiben willst: |
4 | |
5 | strcpy(lines[1], "neuer string zweite zeile"); |
Edit: Rene K. schrieb: > Oooooder, so wie ich denke du das eigentlich wolltest: ;-) > > char line[4][50]; > > line[0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; Also mein Compiler kann sowas nicht ;) Generell bezweifle ich, dass irgendein Compiler da automatisch einen copy generiert, würde nur bei einem Array von 4 Pointern sinn ergeben.
Nimm mal besser einen array von pointern : const char* lines[] = { "line1", "line2", "line3", "line4" }; Das sind allerdings unveränderliche Strings. Wenn das nicht akzeptabel ist musst du einen veränderlichen Array, also z.B. char lines[4][50]; definieren und einzeln z.B. per strncpy oder memcpy initialisieren.
@ Thomas R (Gast) >Da mache ich wohl Fehler, denn das will nicht funktionieren: In der Tat. Du hast vergessen, in einem C-Buch nachzulesen, wie Strings in C funktionieren. >// ab hier funktioniert nichts, nur leere Zeilen > char line[50][4]; > line[50][0] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; Das geht so nicht, da müßte mindestens eine Warnung oder ein Fehler vom Compiler kommen. Eine direkte Stringzuweisung ist in C NICHT möglich. Außerdem ist deine Definition falsch. char line[50][4]; definiert ein Array mit 50x4 chars. Du willst aber eher 4x50. Das ist ein Unterschied, vor allem in der Datenorganisation. Weiterhin ergibt der Ausdruck line[50][0] = auf der linken Seite den INHALT eines chars in deinem Array. Das ist aber kein lvalue, dem man einen Wert zuweisen kann. Hier muss der Compiler meckern! Wenn, dann eher so.
1 | char line[4][50] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn", |
2 | "A quick brown fox jumps over the lazydog", |
3 | "1234567890123456789012345678901234567890", |
4 | "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"}; |
5 | |
6 | lcd_print_at ( line[0], 0, 0 ); |
7 | lcd_print_at ( line[1], 0, 1 ); |
8 | lcd_print_at ( line[2], 0, 2 ); |
9 | lcd_print_at ( line[3], 0, 3 ); |
10 | }
|
Hallo alle die mir geholfen haben, ich muß mir C und deren Strings noch mal genauer anschauen. So funktioniert alles bestens: int main( void ) { lcd_init(0); lcd_init(1); lcd_init(2); lcd_init(3); // LCD: 40x4 Zeichen clearLCDline(0,0); clearLCDline(1,0); clearLCDline(2,0); clearLCDline(3,0); // das funktioniert: char line_0[50] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn"; lcd_print_at ( line_0, 0, 0 ); _delay_ms(1000); // das funktioniert auch! char line[4][50] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn", "A quick brown fox jumps over the lazydog", "1234567890123456789012345678901234567890", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"}; lcd_print_at ( line[0], 0, 0 ); lcd_print_at ( line[1], 0, 1 ); lcd_print_at ( line[2], 0, 2 ); lcd_print_at ( line[3], 0, 3 ); }
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.