2017-11-28 18 views

答えて

1

NULターミネータが続く0文字以上の文字は、Cスタイルの文字列です。リテラルを定義するには、二重引用符の表記法を使用できます。そのような "3'charあるとして、charに収まることができるC、int

'34'のようなものは、マルチキャラクターリテラルです。

+0

終端ヌル文字がある限り、それはCスタイルの文字列ですか? – step

+0

@step:はい、これは別の方法です。 – Bathsheba

+0

ああありがとう!しかし、もし私がこの 'char seq [20];を持っていたら、あなたはこれを何と呼ぶでしょうか?単に文字の配列ですか?そうであれば、Cスタイルの文字列は実際には傭船者の配列でもあるので、ちょっと混乱しないでしょうか?したがって、 'seq'をCスタイルの文字列と呼ぶのでなければ、それを明示的に記述することなくCスタイルの文字列ではないことを暗示する方法はありません。 – step

1

1つの要素バッファは技術的にはまだバッファです。それの開始点へのポインタを形成することは、その中にいくつの項目があるかによってまったく影響を受けません。

だから、それはcharではありません。さらに、タイプシステムでさえ、char[1]charから区別する。

1文字列に驚くかもしれません。この1つの"a"には2つの文字がバッファに存在するため、1つではありません。有効なC文字列である唯一の文字バッファは、空の文字列です。

+0

と空の文字列を定義する方法は? – step

+0

文字列の長さが0の場合、空であることです。しかし、null文字を終了する文字列があれば、これはいつ可能ですか?つまり、ヌル文字は長さを1つ増やします。 – step

+0

@step - 「C文字列」はバッファ内のデータのプロパティです。文字列ではない文字バッファを持つことができます。 nulターミネータは、データ表現の一部です。それはあなたが作る必要がある区別です。したがって、1文字バッファは、その文字がNULL終端文字の場合にのみ文字列になります。偶然、それは空の(または長さ0の)文字列です。 – StoryTeller

0

1つの文字のみを含むCスタイルの文字列が文字列と見なされるか、 という構文をcharと呼びますか?

実際Cスタイルの文字列がstringを意味し、すなわち、それはcharデータ・タイプとは全く異なります。 C言語のように、std::stringのように、string型を操作して表現する専用の組み込み型がないため、一度文字配列を使用する必要があります(基本的にnullで終了)。つまり、文字列型を表現するのにchar str[SIZE] = "something"です。一方、単一の文字は、char []と全く異なるcharに格納されます。これらの2つのことは同じではありません!

例、

char str[] = "a"; // sizeof(str) will give 2 because presence of extra NULL character 
char c = 'a'; // simply a single character 
関連する問題