Nullterminierte Strings

DeChecka

Erfahrenes Mitglied
Hi!
Kann ich in einem char-Array auch mehrere '\0' s haben?
Also zum Beispiel: 'h', 'a', 'l', 'l', 'o', '\0', 'g', 'u', 't', 'e', 'n', 't', 'a', 'g', '\0' ...

MfG
DeChecka
 
Natürlich kannst du das machen - aber sämtliche Funktionen lesen dann nur bis zur 1. Terminierung und machen danach schluss!

also in deinem Beispiel würde ein printf aufruck folgendes ausgeben:
Hallo und dann ist ende!
 
ja ich weiss so eine frage nervt,. aber wozu willst du das eigentlich machen ?
Egal was du vorhast - es gibt bestimmt einen besseren weg ;)
 
Es gibt allerdings auch Stringlisten, die lauter nullterminierte Strings hintereinanderhängen und die Liste mit einer zusätzlichen 0 abschließen, z. B., wenn Du die Umgebungsvariablen unter Windows ausliest.
Beispiel:
Code:
char Begruessungen[] = {'H', 'a', 'l', 'l', 'o', 0, 'G', 'u', 't', 'e', 'n', ' ', 'T', 'a', 'g', 0, 'G', 'u', 't', 'e', 'n', ' ', 'A', 'b', 'e', 'n', 'd', 0, 0};
 
Zuletzt bearbeitet:
Naja... ich will bestimmte Wörter nicht in nem zweidimensionalen Array speichern, sondern in nem eindimensionalen, da mir das für meine Zwecke einfacher erscheint ;) ...

Das mit dem Abschneiden der Zeichen nach dem ersten '\0' ist mir bewusst, das löse ich anders...

Nur mein Prog funktionierte nicht so, wie es sollte, deshalb wollt ich mich mal vergewissen...

Also danke mal allen! Der Fehler muss dann wohl woanders liegen.

MfG
DeChecka
 
moin


Poste den Code mit ner Beschreibung was es machen woll, dann kann dir sicher schnell geholfen werden.


mfg
umbrasaxum
 
DeChecka hat gesagt.:
Naja... ich will bestimmte Wörter nicht in nem zweidimensionalen Array speichern, sondern in nem eindimensionalen, da mir das für meine Zwecke einfacher erscheint ;) ...

Das mit dem Abschneiden der Zeichen nach dem ersten '\0' ist mir bewusst, das löse ich anders...

Nur mein Prog funktionierte nicht so, wie es sollte, deshalb wollt ich mich mal vergewissen...

Also danke mal allen! Der Fehler muss dann wohl woanders liegen.

MfG
DeChecka

tja ein 2 dimensionales ist in C ein Eindimensionales im Speicher
Code:
int i[10][10];

i[j][k]=y;

wird eigentlich zu
Code:
 *(i + j*10 + k)=y;
(Zeiger - Feld dualität... mit implizitem Typecast von int auf sizeof(int) da ja j und k ints sind aber i ein Zeiger auf int)

es ist nur einfacher zu schreiben
Code:
 i[j][k]=y;


wenn die Strings unterschiedlich lang sind: mit
Code:
char* Stringarray[10];
und dann
Code:
Stringarray[0]=(char *)malloc(DynamischeLaenge * sizeof(char));
sizeof(char) kann entfallen, da es per definition 1 ist.

auf das Abfragen nicht vergessen und das Freigeben, es freut sich sonst Mr. Memoryleak

lg
Johannes
 
freakyjoe hat gesagt.:
sizeof(char) kann entfallen, da es per definition 1 ist.

is zwar OT, aber ist das wirklich so ? .. also klar das es fast überall eins ist (ich würde auch nichts anderes annehmen), aber laut welcher definition ist es 1 ?

ich verwende i.a. sizeof(char), wusste aber bisher nie ob es irgendwann ne rolle spielt - gibt es systemumgebungen wo es nicht so ist ?....
 
moin


Ja das ist richtig. Ein char ist ein Byte groß, genauso wie ein unsigned char.


mfg
umbrasaxum
 
Re: [OT] Noch eine frage anhängt

Mal rein interessenhalber, wie schaut es eigentlich dabei mit UNICODE kodierten Strings aus, gibt es dafür regeln oder muß man sich sowas selber zusammenbasteln, denn damit würden ja ein Zeichen nicht mehr ein Byte belegen. (Habe grad nicht in Kopf mit wie vielen es Kodiert ist ich glaube 2 oder?)

Gruß Lemi
 
Zurück