ページ 11

typedef structで格納した文字を表示しようとすると強制終了します

Posted: 2013年7月28日(日) 15:44
by メカ
DXライブラリを使用しています。

コード:

#include "DxLib.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char Name[256];
int Item;//アイテム個数
int Item_i;//所持しているアイテム
typedef struct {char name[128];}ItemName; // アイテム格納用変数
ItemName item_name[100]={{"NoItem"},{"鍵"},{"薬(小)"},{"薬(中)"},{"薬(大)"}};//データ読み込み
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 )return -1 ;//DXライブラリ初期化
if(Item==1)sprintf(Name,"%sを手に入れた!",item_name[mapevent_1[Item_i]]);
if(Item> 1)sprintf(Name,"%sを%d個手に入れた!",item_name[Item_i],Item);

DrawString(0,0,Name,GetColor(255,255,255),TRUE);
WaitKey();

DxLib_End();
return(0);
}
コードが2000行近くあって複雑なので必要な部分だけ貼り付けました。
Item;
Item_i;
は既に整数が代入されているとします。

if(Item==1)sprintf(Name,"%sを手に入れた!",item_name[mapevent_1[Item_i]]);
if(Item> 1)sprintf(Name,"%sを%d個手に入れた!",item_name[Item_i],Item);
この部分を消したら正常に動きました。
また、
if(Item==1)sprintf(Name,"%sを手に入れた!","アイテム");
if(Item> 1)sprintf(Name,"%sを%d個手に入れた!","アイテム",Item);
こんな感じに書き換えても正常に動きました。
おそらくバグの原因はitem_nameにあると思います

どうすればバグを避けられるのでしょうか?
ご回答お待ちしております。

Re: typedef structで格納した文字を表示しようとすると強制終了します

Posted: 2013年7月28日(日) 15:58
by KORYUOH
item_name[Item_i].nameのようにした場合の動作を教えてください

動かなければ
if(Item==1)sprintf(Name,"%sを手に入れた!",item_name[mapevent_1[Item_i]]);
のmapevent_1についての情報を開示してください