2017-01-24 8 views
2

私はTaking an index out of const char* argumentでこれを尋ねましたが、別の質問と一緒に尋ねましたが、最初の質問にしか議論がなかったので、別のスレッドに分割しました。C strの表現 - const char * vs const unsigned char *

質問:

は誰もが今までのconst charとしてC文字列を表現したいと思う何らかの理由*ないなどのconst unsigned char型*はありますか?一方

  • 、私はすべての時間 * のconst charとして C列strの一般的に使用される表現を参照してください。
  • 一方、const char *を使用すると、時には は、上にリンクされている例のように、キャストを符号なしに強制します。

(不特定の実装に指定された符号の有無で)charは、文字のデフォルトのタイプですので、おかげで、

+0

あなたの投稿を細かく刻み、*本物の質問*を得ることができます。あなたはなぜ 'char'が実装に残されるのではなく、言語の規則として常に署名されていないのか尋ねていますか? – WhozCraig

+0

@WhozCraigそうですね。しかし、私は最終的に学ぶ:)それは目標ですか? –

+1

ええ、私はあなたの質問が 'char'と' unsigned char'(これは 'char'がとにかくかもしれません)と、同​​じことを指すconstポインタについてより多くのものが載っているからです。私は確かに、サイトのどこかに重複していると思います(そうでなければ驚くでしょう)が、あなたの質問の根源でなければそれを探しても意味がありません。編集:[found one](https://stackoverflow.com/questions/914242/why-is-chars-sign-ness-not-defined-in-c) – WhozCraig

答えて

4

はい、もちろん一般的な読み取り専用の文字列は、const char *でなければなりません。

つまり、"foo"のようなリテラルは、unsigned charという要素ではなく、charで構成されています。

もちろん、あなたはそれが気に入ったら文字をunsignedと解釈できますが、キャストが必要な場合もあります。

+0

良い答え。しかし、WhozCraigが上でコメントしたように、おそらく私はなぜ文字が常に言語の規則として署名されていないのかを尋ねたはずです。 –

+0

@EladWeissおそらく。これは[XY問題](http://mywiki.wooledge.org/XyProblem)として知られており、ときどき発生することが時々分かりにくいです。 – unwind

+2

@EladWeiss「なぜcharは常にルールとして署名されていないのですか」 - >十分な初期のプラットフォーム(おそらくほとんどのプラットフォーム)は_unsigned_'char'と_signed_'char'で動作するように設定されていたからです。この言語は、最大の移植性をもたらした妥協を反映しています。最近の文字セット(Unicode)では、負のコードポイントはなく、Cの 'is ...()'関数は 'unsigned char'の範囲の値をとり、' char'を 'strcmp()'と比較します。それらは 'unsigned char'です。 – chux

関連する問題