Char-array aus einzelnen zeichen

hallo.

ich habe hier ein array mit zeichen:

const unsigned char chararray[]={
„H“„a“„l“„l“„o“" "„W“„e“„l“„t“
};

gibt es einen grund, warum der programmierer nicht einfach

const unsigned char chararray[]={
„Hallo Welt“
};

geschrieben hat?

gruß

michael

Hallo.

Genauso könntest du schreiben: Warum muss man [2,4,6,8] schreiben, wenn man auch 2468 schreiben könnte :wink:

Viele Grüße, Dukath

???
hallo.

Genauso könntest du schreiben: Warum muss man [2,4,6,8]
schreiben, wenn man auch 2468 schreiben könnte :wink:

sorry, aber das ist unfug.
ein array [2,4,6,8] steht als 02040608 im speicher. die zahl 2468 wird zu 09A4 (oder A409, je nach endian).

in meinem beispiel läuft’s mit meinem compiler aber auf’s gleiche raus.
deshalb die frage, ob es irgendeine begründung (z.B. MISRA) für die „u“„m“„s“„t“„ä“„n“„d“„l“„i“„c“„h“„e“ schreibweise gibt.

gruß

michael

Hi,

Deine zweite Variante funktioniert nicht. Dass die erste funktioniert ist höchst singulär. Kurz und richtig ist

const unsigned char chararray[]=„Hallo Welt“;

Ist die erste Variante überhaupt nullterminiert?

Gruß, Lutz

hallo.

Deine zweite Variante funktioniert nicht. Dass die erste
funktioniert ist höchst singulär.

wie gesagt: mein (kommerzieller) compiler akzeptiert beide varianten gleichermaßen.

Kurz und richtig ist

const unsigned char chararray[]=„Hallo Welt“;

Ist die erste Variante überhaupt nullterminiert?

müßte ich mal prüfen. die bytes danach sind dummerweise auch nullen, sonst könnt ich’s jetzt schon sagen.

gruß

michael

ps:

wie gesagt: mein (kommerzieller) compiler akzeptiert beide
varianten gleichermaßen.

visual c++ 2010 auch.

Ist die erste Variante überhaupt nullterminiert?

sind beide.

gruß

michael

Howdy,

Deine zweite Variante funktioniert nicht. Dass die erste
funktioniert ist höchst singulär. Kurz und richtig ist

da ist nichts singuläres dran, denn beide Varianten sind identisch. Hintereinander folgende Stringliterale werden zu einem Literal zusammengefasst und dieses ist per Definition null-terminiert. Die Initializer List ist korrekt.

Auch korrekt wäre noch

const unsigned char chararray[]= „H“„a“„l“„l“„o“" "„W“„e“„l“„t“;

Gruss
norsemanna

1 Like

hallo.

Auch korrekt wäre noch

const unsigned char chararray[]= „H“„a“„l“„l“„o“"
"„W“„e“„l“„t“;

aber es gibt absolut keinen grund (außer verwirrung zu stiften), einfach nur „Hallo Welt“ zu schreiben?

evtl. hat der programmierer ein ursprüngliches chararray

char chararray[] = { ‚H‘, ‚a‘, ‚l‘, ‚l‘, ‚o‘, ‚W‘, ‚e‘, ‚l‘, ‚t‘, ‚\0‘ };

„optimiert“?

danke & gruß

michael

Howdy Michael,

aber es gibt absolut keinen grund (außer verwirrung zu
stiften), einfach nur „Hallo Welt“ zu schreiben?

es gibt schon einige Programmierer, die Verwirrung stiften wollen, oder so programmieren, dass andere den Code nur schwer lesen können. Deshalb gibt es in der Regel auch Coding Guidelines im professionellen Bereich.

char chararray[] = { ‚H‘, ‚a‘, ‚l‘, ‚l‘, ‚o‘, ‚W‘, ‚e‘, ‚l‘,
‚t‘, ‚\0‘ };

„optimiert“?

nun ja… eher nicht, aber auch in meinem Code findet sich aufgrund der besseren Lesbarkeit schon mal so was wie z.B.

const char\* const szFormat = "\n"
 "\n"
 "%s\n"
 "\n"
 "\n
 "%s\n"
 "\n
 "\n
 ;

Wenn nun jemand das auf eine Zeile zusammenzieht, sieht das so aus, wie das, was du berichtet hast …

Gruss
norsemanna

Gleichwertig
Jepp

Meines Wissen macht das schon der Präprozessor und ist in K&R definiert. In Präprozessordirektiven gab es deshalb dann # und ##.

Ich habe die Schreibweise immer dazu angewandt, dass der Quelltext vernünftig ansehbar/ausdruckbar wurde.

Ciao, Allesquatsch