2017-01-24 8 views
2

Ich fragte diese auf Taking an index out of const char* argument zusammen mit einer anderen Frage, aber die Debatte wurde nur auf die erste Frage, so dass ich es in einen anderen Thread aufgeteilt.C str Darstellung - const char * vs const unsigned char *

Frage:

Gibt es einen Grund, warum jemand überhaupt wünschen würde eine C-Zeichenfolge als const char * und nicht als const unsigned char * zu vertreten?

  • Auf der einen Seite sehe ich die häufig verwendete Darstellung von C str als const char * die ganze Zeit.
  • Auf der anderen Seite erzwingt const char * manchmal eine Umwandlung auf unsigned, wie im oben verlinkten Beispiel.

Danke,

+0

Sie haben es schwer, Ihren Post zu zerkleinern, um die * echte * Frage * zu bekommen. Fragen Sie sich, warum ist 'char' nicht immer als Regel der Sprache unterschrieben, anstatt der Umsetzung überlassen? – WhozCraig

+0

@WhozCraig Ja, denke ich. Aber ich werde irgendwann lernen :) Das ist das Ziel, nicht wahr? –

+1

Yeah, ich habe nur gefragt, weil bei der Veröffentlichung Ihrer Frage mehr über 'char' und' unsigned char' (was 'char' sowieso sein mag) und weniger über const-Zeiger auf das selbe. Ich bin mir sicher, dass es irgendwo auf der Site ein Duplikat gibt (wäre erstaunt, wenn es nicht wäre), aber es macht keinen Sinn, danach zu suchen, es sei denn, das ist wirklich die Wurzel Ihrer Frage. Bearbeiten: [einen gefunden] (https://stackoverflow.com/questions/914242/why-is-chars-sign-ness-not-defined-in-c). – WhozCraig

Antwort

4

Ja, natürlich ein allgemeiner Nur-Lese-String sollte const char * sein, da char (mit nicht näher bezeichnet umzusetzungs angegeben Signedness) der Standardtyp für ein Zeichen ist.

Mit anderen Worten, ein Literal wie "foo" besteht aus char, nicht unsigned char, Elemente.

Natürlich können Sie die Zeichen als unsigned interpretieren, wenn Ihnen danach ist, aber dann brauchen Sie vielleicht eine Besetzung.

+0

Gute Antwort. Aber wie WhozCraig oben kommentierte, hätte ich vielleicht fragen sollen, warum Char nicht immer als eine Regel der Sprache unterschrieben wird. –

+0

@EladWeiss Vielleicht. Dies ist bekannt als das [XY-Problem] (http://mywiki.wooledge.org/XyProblem) und es ist manchmal ziemlich schwer herauszufinden, wann es passiert. – unwind

+2

@EladWeiss "warum ist char nicht immer als Regel" -> weil genug frühe (vielleicht die meisten) Plattformen eingerichtet wurden um mit _unsigned_ 'char' und einigen mit _signed_' char' zu arbeiten. Die Sprache spiegelt den Kompromiss wider, der die größte Tragbarkeit bot. Beachten Sie, dass es bei modernen Zeichensätzen (Unicode) keine negativen Codepunkte gibt und C's eigene 'is ...()' -Funktionen Werte im 'unsigned char'-Bereich annehmen und' char' mit 'strcmp()' vergleichen als ob sie sind "unsigned char". – chux

Verwandte Themen