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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
メカ
記事: 37
登録日時: 6年前

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

#1

投稿記事 by メカ » 6年前

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にあると思います

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

KORYUOH
記事: 44
登録日時: 7年前

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

#2

投稿記事 by KORYUOH » 6年前

item_name[Item_i].nameのようにした場合の動作を教えてください

動かなければ
if(Item==1)sprintf(Name,"%sを手に入れた!",item_name[mapevent_1[Item_i]]);
のmapevent_1についての情報を開示してください
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。

閉鎖

“C言語何でも質問掲示板” へ戻る