環境
OS:WIN2000
VC++.NET
度々お世話になります。
以下の処理を実行します。
コンパイルも問題なく通るのですが、
何故か「Run-Time Check Failure #2 - Stack around the variable 'buff' was
corrupted.」
と表示され中断されてしまいます。
// m_iVif[i]には0か1がランダムに入っているとします。
for( int i = 0; i < 24; i++)
{
int iVif[1];
iVif[0] = 1;
if( m_iVif[i] == iVif[0])
{
CString csVifData;
CString csVifCheck;
char buff[1];
csVifCheck = itoa( i + 1, buff, 10);
}
}
上記の処理で何が悪いのかご教授お願いします。
よろしくお願いします。
タイトルにどのように書けばよいのか判断し難かったのをお許し下さい。
申し訳ありません。
char buff[1]; -> TCHAR buff[3];
設定される数字として 1 ~ 24 ということで
文字列にするときには、必ず末尾に '\0' がついてきます。
ですので、
> char buff[1];
では、領域が足りていません。
(1 の場合 '1' と '\0' の2文字分格納するための領域が必要
24の場合 '2' と '4' と '\0' の3文字分必要)
よって、
char buff[ 3 ]; // 最大3文字分格納される
としてあげないといけません。
結局 CString の変数に格納するのであるならば、itoa関数を使わず、
CString::Format関数を使いましょう。
CString csVifCheck;
csVifCheck.Format( _T( %d ), i + 1 );
>つ さん
>Blue さん
返信ありがとうございます。
無事解決いたしました。
基本的ないことに気づきませんでした。
お手数おかけして申し訳ありません。
ありがとうございました。
敬具