web-dev-qa-db-ja.com

Cでの文字列の定義の詳細は何ですか?

私は自分のクラスの1つに対する宿題の質問に回答することになっています。具体的には、Cの特定の配列が文字列と見なされるかどうかを言うことになっています。この記事に基づいて( https://www.geeksforgeeks.org/strings-in-c-2/ )文字列は、末尾にヌルターミネータが付いた文字の配列であることを知っています。

私の主な問題は、次のような配列について尋ねる質問の一部です。

char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };

これは明らかに、末尾にヌル終了文字がある文字の配列です。ただし、途中にnullの終了文字があるため、文字列と見なされますか?それは文字列にどのように影響しますか?

編集:コメントに基づいて、私は質問の実際の表現を提供しました:

「次の配列のうち、strcpy()、strncpy()、strcmp()、strncmp()、および同様の文字列関数(すべての適用を示します)の引数として使用するために、「文字列」と見なすことができる配列はどれですか?」

編集:質問が曖昧に書かれているようだったので(数人が指摘したように)、それについて教授にメールを送りました。気になる人は、「はい、文字列です。重要なのはnull文字があることです。もちろん、これは文字列操作に影響します。文字列はnull文字で終わります。」

10
quango

@DevSolarの答えに加えて、与えられた文字列をいじり回した後に私が発見したものがあるとすれば、

char c1[] = { 'C', 'S', '\\0', '3', '2', '4', '\\0' };

この文字列を出力すると、CS03240が得られ、この文字列のサイズは7になります。私の理解では、\\0はnull文字を示すために使用されます(ie = \0)。もし、するなら:

printf("\0");

出力ログには何も表示されませんが、表示された場合:

printf("\\0");

\0が表示されます。これは、バックスラッシュや引用符などの特殊文字を出力するには、\と一緒に使用する必要があるためです。

私を困惑させるのは出力CS03240であり、そのサイズは7です。文字列のサイズは、文字列の文字数に1(null文字の場合)を加えたものであることが一般的に理解されています。また、char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };という文字列でもサイズは7です。

では、この質問の補足として、ここで何が起こっているのでしょうか?

0
rasengan__