CまたはC ++プログラミングで単一引用符と二重引用符を使用する必要があるのはいつですか?
CまたはC ++プログラミングで単一引用符と二重引用符を使用する必要があるのはいつですか?
回答:
CおよびC ++では、単一引用符は単一の文字を識別し、二重引用符は文字列リテラルを作成します。'a'
は単一の"a"
文字リテラルですが、'a'
とnullターミネータ(2文字の配列)を含む文字列リテラルです。
C ++では、文字リテラルのタイプはですが、Cでは、文字リテラルchar
のタイプはですint
。つまりsizeof 'a'
、intが32ビット(およびCHAR_BITが8)のアーキテクチャでは4であり、sizeof(char)
どこでも1です。
一部のコンパイラは、複数文字定数を許可する拡張機能も実装しています。C99標準は言う:
6.4.4.4p10:「複数の文字( 'ab'など)を含む、または1バイトの実行文字にマップされない文字またはエスケープシーケンスを含む整数文字定数の値は、実装定義です。 」
たとえば、次のようになります。
const uint32_t png_ihdr = 'IHDR';
結果の定数(これを実装するGCC内)は、各文字を取得して上にシフトすることによって取得する値を持ち、「I」は32ビット値の最上位ビットになります。明らかに、プラットフォームに依存しないコードを書いているなら、これに依存すべきではありません。
一重引用符は文字(char
)であり、二重引用符はnullで終了する文字列(char *
)です。
char c = 'x';
char *s = "Hello World";
const char *
です。
単一引用符は単一の文字を表します。二重引用符は文字列(文字の配列)用です。必要に応じて、一重引用符を使用して、一度に1文字ずつ文字列を作成できます。
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
二重引用符は文字列リテラル用です。例:
char str[] = "Hello world";
単一引用符は単一文字リテラル用です。例:
char c = 'x';
編集 Davidが別の回答で述べたように、文字リテラルのタイプはint
です。
char str[] = {'H','e','l','l','o'};
、かつstr
しまうではないヌルターミネータを持っています。
str
は、は文字列ではありません(少なくとも、NTBSとして定義されているCスタイルの文字列ではありません)。
char[]
(文字列と呼ばれることの多い)すべてがnullで終了するわけではないということでした。
"hello" /*seamlessly connected to*/ "world"
。そして、これはコメントされた複数行のメッセージにとって意味があります。
Cでは、「a」などの単一引用符は文字定数を示しますが、「a」は常に0文字で終了する文字の配列です。
文字には一重引用符が使用され、文字列には二重引用符が使用されます。
printf("%c \n",'a');
printf("%s","Hello World");
ハローワールド
これらを逆に使用し、文字列に一重引用符を使用し、文字に二重引用符を使用した場合。ここでは、これが結果になります。
printf("%c \n","a");
printf("%s",'Hello World');
最初の行に。ガベージ値または予期しない値が含まれます。または、次のような出力が表示される場合があります。
一方、2番目のステートメント。何も表示されません。もう一つ。この後さらに説明がある場合。彼らはまたあなたに結果を与えません。
注:PHP言語では、単一引用符と二重引用符を簡単に使用できる柔軟性が得られます。
一重引用符は文字を表し、二重引用符は文字列を表します。
Javaでも同じです。