文字列リテラルの注意点。
"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.',
};
としても、同じエラーになる。