ページ 11

文字列処理

Posted: 2012年10月29日(月) 21:17
by SOJO
 文字列処理についてお聞きしたいことがあります。以下のプログラムは乱数の値を生成し、それと文字列を組み合わせることで、ランダムな画像を読み込む処理を読み込む処理を記述したものです。(実際には構造体の配列とfor文を用いて複数の画像を読み込んでいます)

char string[ 100 ];
int work2;
char word[ 1 ];

work2 = rand() % 5 + 8 ;
itoa( work2, word, 10 );

strcpy( string, "画像/img");
strcat( string, word );
strcat( string, ".png" );

これを実行し、ウィンドウを閉じると

Debug Error!

Line:139

Run-Time Check Failure #2 - Stack around the variable 'word' was corrupted.

と表示されます。(簡略化しています)これはどのようなエラーなのでしょうか?ポインタを使ったりいろいろとしたのですが、エラーが消えません。

Re: 文字列処理

Posted: 2012年10月29日(月) 21:23
by beatle
itoaは整数を文字列に変換します。
C言語の文字列はナル文字('\0')で終了するので、N桁の整数を変換したいならばwordはN+1文字文以上確保しておく必要があります。
例えばrand()が4を返すとき、work2は12となります。
これを10進数で変換すると '1', '2', '\0' という3文字になるのですね。
だからchar word[3]; としなければなりません。

Re: 文字列処理

Posted: 2012年10月29日(月) 21:30
by SOJO
 エラーも消えて解決しました!ご丁寧な説明ありがとうございます!