トップページ > 過去ログ > 記事閲覧
またstrcpyについてなのですが
名前:モストン 日時: 2010/01/14 21:33

下のような処理を行ったとき、途中のstrcpyを呼んだときに"menu1.bmp" のグラフィックが表示されなくなってしまったのです。 デバックで見てみたのですが、一応、menu_imageにグラフィックはロードされているみたいなのですが・・・ 質問ばかりで申し訳ないのですが、よろしくお願いします。 void menu::drawmenu (void){ if(change_menu==0){//メニューが変わった場合 RoadmenuGrafh();//グラフィックロード change_menu=1; } DrawGraph( 0 , 160 , menu_image , TRUE ) ;//メニューの表示 DrawItem(); } void menu::DrawItem(void) { int White; White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 int i; for(i=0;i<MAX_STOCK_ITEM; i++ ) { Item *pItem;//Itemクラスのポインタ pItem = &m_Item[ i ];//アイテムリストを参照 strcpy(pItemName,pItem->pName);//ここでメニューグラフィック消失 DrawFormatString( 10, 190+i*20,White,"%s",pItemName); } DrawFormatString( 20, 170 , White,"アイテム欄"); } void menu::RoadmenuGrafh(void) { switch(set_menu) { case STRAT_MENU: menu_image=LoadGraph( "menu1.bmp" ) ; break; }

Page: 1 |

Re: またstrcpyについてなのですが ( No.1 )
名前:いっち 日時:2010/01/14 21:55

ソースを拝見させていただきました。 > グラフィックが表示されなくなってしまった 上記の事象との関連はわかりませんが思いつく確認すべきところとしては以下の5点です。 1. pItemNameにメモリは確保されているか? 2. pItem->pNameはNull Terminateになっているか? 3. m_Itemにデータは格納されているか? 4. それぞれの型は一致しているか?(warningがでていないか?) 5. そもそもstrcpyは必要か?
Re: またstrcpyについてなのですが ( No.2 )
名前:モストン 日時:2010/01/14 22:34

1 ヘッダのクラス宣言のpublicにてchar pItemName[10];としてあります。 2 Null Terminateの確認の仕方がよくわかりませんが、とりあえず文章は表示されています 3 m_itemには試作としてmenuクラスのコンストラクタでデータを入れています。 4 warningは'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 'strcpy' の宣言を確認してください。 というのが出ています。 5 DrawFormatStringでの文字列の線画のリファレンスの文中にstrcpyがあり、これを使わなければ文字列を表示できないと思っていたのですが、違うのでしょうか? それとも他に文字列を表示させられる関数があるのでしょうか。
Re: またstrcpyについてなのですが ( No.3 )
名前:いっち 日時:2010/01/14 23:02

回答ありがとうございます。 以下の点を再度確認してみてください。 1. char pItemName[10]; は少し小さくは無いでしょうか? どのようなデータが入るのか知らないのですが、とりあえず、256ぐらいにして動かしてみてください 2. この点は格納するデータが大きすぎなければ普通は大丈夫だと思います 3. m_Item[i].pNameの中に入るデータでもっとも長いデータは何でしょうか? もし、半角10文字以上、全角5文字以上であれば長すぎです。 4. そのエラーは無視してもとりあえず大丈夫です 5. 30行目当たりを以下のように変えても出力されるはずです。 > DrawFormatString( 10, 190+i*20,White,"%s",pItemName); ↓↓↓ > DrawFormatString( 10, 190+i*20,White,"%s",m_Item[i].pName);
Re: またstrcpyについてなのですが ( No.4 )
名前:モストン(解決) 日時:2010/01/14 23:16

1の配列を変えてみたところ、メニューのグラフィックの表示ができました! 全角で6以上の名前データがあったため、プログラムがおかしな事になっていたようです。([10]は全角10個までと勘違いしてました。) 5その書き方でも出来たんですか!そちらの方も参考にさせて貰います。 いっちさん本当に助かりました。ありがとうございます!

Page: 1 |