2016-11-25 1 views
-2

なぜこのコードはクラッシュしますか? strcpyは正しく使用されていませんか?文字へのポインタ付きのstrcpyの使用

strcpy code

+2

[コードまたはエラーメッセージの画像を投稿しないでください。](http://meta.stackoverflow.com/q/303812/1679849)strcpyの上使用している場合、[プログラムが中断したの –

+1

可能な複製charポインタ? (char配列で正常に動作)](http://stackoverflow.com/questions/5645949/program-aborts-when-using-strcpy-on-a-char-pointer-works-fine-on-char-array) –

+2

Cのchar \ [\]とchar \ *の違いは何ですか?(http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s) -and-char-s-in-c) –

答えて

4

リテラル文字列によって占有されたメモリに変数msg1ポイント。文字列リテラルは変更できません。文字列リテラルを変更しようとすると、未定義の動作になります。 C標準(6.4.5文字列リテラル)から

  • これらの配列は、それらの要素が>適切な値を持って設けられ区別されるかどうかを指定されていません。 プログラムがこのような 配列を変更しようとすると、その動作は未定義です。
  • あなたは、標準C関数strcpyを使用して文字配列に文字列をコピーする場合、配列はそのゼロを停止するなどの文字列を収容するのに十分なメモリを有していなければならないことを考慮してください。

    コードを有効にするには、ポインタを文字配列に置き換えます。例えば

    char msg1[15] = "Hello World"; 
    //... 
    strcpy(msg1, "Hello New York"); 
    
    関連する問題