• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:strcpyのsegmentation fault)

strcpyのsegmentation fault

このQ&Aのポイント
  • char* argv[argc+1]で配列を作成し、bufの内容を一部ずつtmpにコピーするコードがあります。
  • 一部の文字列は正常にコピーされ、printfの結果も出力されますが、2回目以降はエラーになります。
  • エラーが発生する理由と、char* argv[]を簡単に作成する方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.3

> 最初に回る時にはprintfの結果が出ます これも偶然だと思うけど。そもそも > char* argv[argc+1]; これが初期化されてない。実体がないアドレスに strcpy() してる。 > argv[1]は char*刑なのでstrcpyに何の問題もないと思いますが > どんな問題でerrorがでるのでしょうか? 型が当ってればいいってものじゃありません。メモリの確保はプログラマの責任ですよ? buf がそのまま使えるなら切り分けたあと argv[i] = buf + j; とかでもいいかもしれないし、buf が一時的なメモリなのなら、malloc() してコピーしなければなりません。もちろん切り分けた文字列を格納可能なサイズで。使い終わったら free() する責任もあります。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

おっと #1 で strcpy(buf, "hello world"; に閉じるかっこをつけ忘れた. まあここは本題じゃないですが.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

例えば #include <string.h> #include <stdio.h> int main() { char buf[2]; strcpy(buf, "hello world"; printf("%s\n", buf); return 0; } というプログラムに問題がないと思いますか?

関連するQ&A