strcat(string, '!');はうまく動かないのか。
A:
文字(character)と文字列(string)には大きな違いがある。strcat()
は文字列を連結する。
Cの文字は文字集合での値に対応する小さな整数で表現される(以下の 質問8.6を参照)。文字列は文字の配列で表現される。普通は配列の最 初の文字を指すポインターを操作する。文字が来ること期待されてい るところに文字列を使うことも、文字列が来ることを期待されている ところに文字を使うことも間違いである。文字列に!を連結するには、
strcat(string, "!");を使う。
References:
CT&P Sec. 1.5 pp. 9-10.
A:
- char *string;
- ...
- if(string == "value") {
- /* 文字列が"value"と一致した */
- ...
- }
2つの文字列を比較するには、普通はライブラリー関数strcmp()を使う。
- if(strcmp(string, "value") == 0) {
- /* 文字列が"value"と一致した */
- ...
- }
char a[] = "Hello, world!";と書けるのに、
char a[14];と書けないのか。
a = "Hello, world!";
A:
文字列は配列で、配列に直接は代入できない。かわりにstrcpy()を使
う。
strcpy(a, "Hello, world!");質問1.32, 4.2, 7.2も参照のこと。
A:
Cで文字は、その値に対応する(その機械が使っている文字集合の)小
さな整数で表現される。だから変換ルーチンは必要ない。文字を持っ
ているということは、その値を持っているということである。
A:
知らなくて驚くだろうけど、Cの文字定数はint型を持つ。だから
sizeof('a')はsizeof(int)である(ただしC++では話が違う)質問7.8も
参照のこと。
References:
ANSI Sec. 3.1.3.4; ISO Sec. 6.1.3.4; H&S Sec. 2.7.3
p. 29.