Forum: Compiler & IDEs Wie kriege ich viele Strings in den Programm Memory


von Thomas (Gast)


Lesenswert?

Hallo,
ich muß viele Strings im Programm Memory speichern.
Gibt es eine clevere Methode dafür? Vielleicht
übers makefile? Oder wie geht es mit direkt
vom Quellcode?
Wer hat sowas schon mal gemacht?

Thomas

von Jonas Diemer (Gast)


Lesenswert?

ich weiß nicht, ob das geht, aber versuch's doch mit nem array. übers 
makefile ist unsinnig (oder?).

von Niki Hammler (Gast)


Lesenswert?

Wie meinst du das?

Also wie das übers makefile gehen soll hab ich keine Ahnung, aber wenn 
deine Strings sozusagen Konstanten sind und du sie einfach im RAM 
brauchst dann gibt es doch nichts leichteres als:

unsigned char *string1 = "Das ist ein String";
oder
unsigned char string1[] = "Das ist ein String";


Du kannst sie dann auch ganz bequem über string1 accessen.

Falls sie aber beim Compilieren variabel sind, könntest du sie so über 
die makefile einspeisen:


In deinem source:

unsigned char mein_string[] = DEFINED_MY_STRING;


und dann im makefile der linie "CPFLAGS" folgendes hinzufügen:
-DDEFINED_MY_STRING="Das ist mein String"


Du könntest natürlich auch eine ganze Textdatei "dynamisch" einspielen:

unsigned char mein_string[] = "
#include "c:\pfad\zu\einer\datei"
";



niki

von Christian (Gast)


Lesenswert?

Hallo,

hierzu eine Frage von mir:
Wieso willst du die Strings als unsigned char definieren und nicht 
einfach nur als char?
Normalerweise setzt sich ein String aus chars zusammen, unsigned char 
nehme ich nur, wenn ich Variablen brauche, die ein Byte groß sind.


ciao

      Christian

von Thomas (Gast)


Lesenswert?

Danke Niki,
ich denke ich mache es auf vorgeschlagene
Standardversion. Ich dachte aber, daß solche
Strings, die nicht mit PSTR erzeugt worden sind, bei Programmstart ins 
RAM kopiert werden, und da wäre dann kein Platz mehr.

Das mit dem unsigned char ist glaube ich, damit man auch ASCII Codes 
größer 127 verwenden kann. Oder?

von Niki Hammler (Gast)


Lesenswert?

Hallo!

Ja das kann sein, aber im Endeffekt verstehen dann beide (signed und 
unsigned, char KÖNNTE ja auch stdmässig als unsigned definiert sein) die 
gleichen Zeichen.

Ich habe mir das unsigned angewöhnt wie ich meinen TCP/IP Stack 
programmiert habe.

Im Allgemeinen bin ich beim Programmieren sehr ordentlich und versuche 
nie einen Zweifelsfall offen zu lassen.
Ich mag Definitionen wie "int" oder "char" deswegen nicht, da man nie 
weiss wie sie jetzt wirklich definiert sind. Ich nehme immer
unsigned short int
unsigned long int
unsigned char
signed char
unsw.

Soll aber nicht heissen das eure Version falsch ist, es ist lediglich 
mein eigener Programmierstil

Niki

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.