Forum: Compiler & IDEs array mit unterschiedlichen Dimensionen in C


von Basti (Gast)


Lesenswert?

Hallo,

ich habe folgende Problemstellung. Ich habe für unterschiedliche Indexe 
eines Arrays unterschiedliche Anzahl an Strings. Dazu siehe folgendes 
Beispiel:

Index 1: "String1", "String2"
Index 2: "String3"

Nun möchte ich diese Informationen in ein Array packen. Dazu habe ich 
folgenden Code zur Initialisierung:

const char* varString1[]    = {"String1", "String2"};
const char* varString3[]    = {"String3"};

const char** variable[] =
{
    varString1,
    varString3,
};

Ich habe nun ein Array variable, das für jeden Index unterschiedliche 
Längen haben kann. Gucke ich mir die Variablen varString1 und varString3 
im Speicher an so muss ich feststellen, dass diese im RAM stehen. Was 
muss ich ändern, damit die Variablen im ROM stehen.

Vielen Dank im voraus für eure Hilfe!

Grüße
Basti

von Klaus W. (mfgkw)


Lesenswert?

vielleicht Tutorial lesen oder die Suchfunktion bemühen?
Möglicherweise hatte schon mal jemand ein entfernt ähnliches Problem...

von Basti (Gast)


Lesenswert?

Also ich habe in den Tutorials und mit Hilfe der Suchfunktionen nichts 
brauchbares gefunden:

Ich habe die Lösung aber hier gefunden:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka9590.html

Also der Code muss folgendermaßen aussehen:

const char* const varString1[]    = {"String1", "String2"};
const char* const varString3[]    = {"String3"};

const char* const* variable[] =
{
    varString1,
    varString3,
};

von Rolf M. (rmagnus)


Lesenswert?

Aha, es geht also um einen ARM-Prozessor. Nächstes Mal wäre es nett, 
wenn du das dazuschreiben würdest. Klaus ist vermutlich (wie die meisten 
hier, wenn nichts explizit angegeben ist) von einem AVR ausgegangen, für 
den das im Tutorial beschrieben ist, aber ganz anders funktioniert.

von Basti (Gast)


Lesenswert?

Um es genau zu sagen ging es um einen v850 Controller aber das tut 
eigentlich nichts zur Sache.  ;-)

Dieses Beispiel sollte mit jedem Compiler (also auch Controller )laufen 
also auch mit einem AVM, ARM usw. Oder sehe ich da was falsch ???? :-O

Grüße
Basti

von Karl H. (kbuchegg)


Lesenswert?

Basti schrieb:
> Um es genau zu sagen ging es um einen v850 Controller aber das tut
> eigentlich nichts zur Sache.  ;-)
>
> Dieses Beispiel sollte mit jedem Compiler (also auch Controller )laufen
> also auch mit einem AVM, ARM usw. Oder sehe ich da was falsch ???? :-O

Du siehst das insofern falsch, als es in C eigentlich kein RAM oder ROM 
gibt. Insofern ist nicht gesagt, dass etwas das const ist, in einem 
'ROM' landet. Ob das so ist und wie das genau funktioniert, definiert 
dein Compiler und nicht die Sprache C.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Basti schrieb:

> const char* const* variable[] =

Oder sogar

const char* const* const variable[] =

von Rolf Magnus (Gast)


Lesenswert?

Basti schrieb:
> Um es genau zu sagen ging es um einen v850 Controller aber das tut
> eigentlich nichts zur Sache.  ;-)
>
> Dieses Beispiel sollte mit jedem Compiler (also auch Controller )laufen
> also auch mit einem AVM, ARM usw. Oder sehe ich da was falsch ???? :-O

Zu dem, was Karl Heinz geschrieben hat, kommt noch dazu, daß z.B. der 
AVR separate Adressräume für RAM und Flash hat, auf die auf 
Assembler-Ebene mit unterschiedlichen Instruktionen zugegriffen werden 
muß. Daher reicht da ein einfaches const nicht aus.

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.