C言語なら俺に聞け(入門編)Part 129 [転載禁止]©5ch.io
レス数が950を超えています。1000を超えると書き込みができなくなります。
0970デフォルトの名無しさん
2015/08/08(土) 19:50:59.65ID:D0x4pWwHちょっ>>948のは、現実のstrtol()の第2引数はchar**でconst char**を「渡せない」んだけど何か理由有り?
という質問のですが…
ぶっちゃけ説明不足だったかもしれないので今から説明すると、strtol()の第2引数がchar**である結果、
次のコードの変数endをconst付きにできず、万が一[A]の行が紛れ込んでもコンパイル時にwarningにならないという、
long foo(const char* str) {
/*const*/ char* end; /* ←左のconstのコメントアウトを外すとエラー*/
long val = strtol(str, &end, 10);
*(end - 1) = '*'; /* [A] 上の結果、strを書き換えるコードが合法に… */
return val;
}
このような事故は、strtol()の第2引数がconst char**でありさえすれば防げるのですが、そうなっていないのは何故…!?という疑問
あと引数の型const char**に対し、char**型変数を渡せるというのは真実としていかがなものかと…(VCだとエラーになる
レス数が950を超えています。1000を超えると書き込みができなくなります。