Microsoft Development Enviromentを解決するには? – プログラミング – Home

通知
すべてクリア

[解決済] Microsoft Development Enviromentを解決するには?


こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

環境
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);
}
}

上記の処理で何が悪いのかご教授お願いします。
よろしくお願いします。

タイトルにどのように書けばよいのか判断し難かったのをお許し下さい。
申し訳ありません。


引用未解決
トピックタグ
つ
 つ
(@つ)
ゲスト
結合: 18年前
投稿: 3
 

char buff[1]; -> TCHAR buff[3];


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

設定される数字として 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 );


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>つ さん
>Blue さん
返信ありがとうございます。

無事解決いたしました。
基本的ないことに気づきませんでした。

お手数おかけして申し訳ありません。
ありがとうございました。

敬具


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました