プロが教える店舗&オフィスのセキュリティ対策術

次の関数の2つ目の引数にconstがついている意味が分かりません。どなたか教えてください。

char* strcpy( char* dst, const char* src )
{
    char* p = dst;
    while ( *p++ = *src++ ) { }
    return dst;
}

A 回答 (2件)

変数やポインタの指している内容を書き換えしないようにって明示するために、const修飾子が付いています。


関数内の処理だと、文字列をコピーする際にコピー元の文字列が書き換わったら困るでしょうし。

その関数を別の関数から呼び出す際にも、呼び出し元の変数や別の関数の引数をしっかり修飾していれば、第1第2引数を間違えるなんかしたらエラーにしてくれます。

例)
// 文字列を2つまとめて dst1<-src1 dst2<-src2 にコピーする関数
void strcpy2(char* dst1, char* dst2, const char* src1, const char* src2)
{
 strcpy(src1, dst1);  // <-関数内でconstの付いた引数のsrc1を書き換えようとするので、エラーにしてくれるハズ。
    • good
    • 0

>constがついている意味が分かりません


関数の中で、char* src は変えません! と宣言しているだけでしょう。

愚かなコンパイラでは、何もしませんが、賢いコンパイラでは、srcに変更を加えようとする命令で警告を出してくれます。

なお、手元に愚かなコンパイラしかなくても、
 人間がエラーを発見するときに役に立つ
ので、const宣言する意味はあると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!