Forum: Compiler & IDEs Stringlänge in eiem Zeigerfeld ermitteln


von unwissender (Gast)


Lesenswert?

Ich möchte die Länge von Strings aus einem Zeigerfeld ermitteln, welche 
zu Debugzwecken der Variable "temp" zugewiesen werden.
Zielsystem ist ein AVR Atmega32, WinAVR (keine Ahnung, neueste Version).
1
...
2
prog_char message1[]  = "string_1\r";
3
prog_char message2[]  = "string__2\r";
4
prog_char message3[]  = "string___3\r";
5
prog_char message4[]  = "string____4\r";
6
prog_char message5[]  = "string_____5\r";
7
PGM_P messages[] = { message1, message2, message3, message4, message5 };
8
...

Version 1 ergibt eine 1.
1
...
2
3
  for (index = 0; index < :wasweißich:; index++) {
4
    test = strlen(messages[index]);
5
6
...

Version 2 eine Null '\0' .
1
...
2
3
  for (index = 0; index < :wasweißich:; index++) {
4
    test = strlen(*(messages[index]));
5
6
...

Nun die Frage: Was verstehe ich mal wieder grundlegend falsch?

mfg

von Karl H. (kbuchegg)


Lesenswert?

unwissender schrieb:

> Nun die Frage: Was verstehe ich mal wieder grundlegend falsch?

Das du auf Dinge im Flash nicht mit den normalen Funktionen zugreifen 
kannst. (Ich gehe mal davon aus, dass ein prog_char ein char ist, der im 
Flash residiert).

Deine Version 1 wäre im Prinzip schon richtig, wenn du noch 
berücksichtigen würdest, dass message im Flash liegt und man daher nicht 
einfach über messages[i] zugreifen kann (Selbiges für strlen)

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

von unwissender (Gast)


Lesenswert?

strlen_P, ich ahnte es schon beim Abschicken des Postings, Danke, Karl 
Heinz!

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.