文字列リテラルの注意点。

"abc" と'abc'では意味が違うというお話。
C++言語ではどちらもchar型で解釈されてしまうが、
Cでは"abc"はchar型、'abc'はint型に解釈されてしまう。

2011.4.4追記

char key = 'a';
char ch = key[0];
int num = key[0];
cout << ch << endl;
cout << num << endl;

したら、エラー出ずに

97
a

と出力される。


C++では、'a'は文字列のaと解釈される。
Cでは、'a' == 97と解釈される。
C++,Cともに、"a" == 文字列のa + '\0'と同じこと。

ただし、C++では、複数の文字列をシングルクオーテーション(')でかこむと、文字列として機能しなくなるようで、
'aa' == 110000101100001 == 12464となる様子。なので、次の例ではエラーになる。
例:

char arr[3][12] =
      { 'W........WW.',
	'.WWW.....WWW',
	'....WW...WW.',
};

と組むと、
1>c:\users\~lakecount.cpp(18) : error C2015: 定数の文字数が多すぎます。
と10個くらい同じエラーがでる。
なぜかというと、「.」と「W」は数字に解釈されてしまうから。

なので、

char arr[3][12] =
      { "W........WW.",
 	".WWW.....WWW",
	"....WW...WW.",
};

としても、エラーが出てしまう。12この文字数があるのではなく、一番最後に'\0'が付加されるので、12+1となる。

char arr[3][12+1] =
      { "W........WW.",
	".WWW.....WWW",
	"....WW...WW.",
};

これでエラーは出なくなった。

ちなみに、

char arr[3][12+1] =
      { 'W........WW.',
	'.WWW.....WWW',
	'....WW...WW.',
};

としても、同じエラーになる。