- 462 名前:デフォルトの名無しさん [2007/07/04(水) 22:47:33 ]
- >>408
char *s = "hoge"; は、書き換えたりしない(書き換えられないとは違う)。 同じ文字列リテラル(ダブルクォーテーションで括った文字列)は、 コンパイラに特別指定しない限り同じ領域を指すポインタである。 深夜までデバッグしたくなければ書き換えるのはやめれ。 従って、("hoge"[2] == 'g') は、真になる。参照する方はやりたい放題。 関数内での char s[] = "hoge"; はありえないと思うのだが、検証した? char s[]というのはポインタではなく、要素数を省略した配列なので、 まず、要素数が決まる `= { ... }' という構文が必要。 そして、この構文は静的変数(グローバル変数か、スタティック変数)にだけ許される。 例えば、static char s[] = { 'h', 'o', 'g', 'e', '\0' }; これなら別の値に自由に変更可。 例外として、引数がある void hogege(char hoge[]); これは void hogege(char *hoge); と全く同義なので自由に書き換えられる。 もちろん、呼び出し元の関数と調和をはかるように。
|

|