ページ 11

ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 11:38
by 奥兵
winAPIとGDI+を使ったプログラムです。picというフォルダに0.pngから9.pngまで画像が用意してあり、for文でいっきに読み込むことを狙い
以下のコードを書いたのですが、「0x00000001 を読み込み中にアクセス違反が発生しました。」といった類の出力がされexeがうまく動きません。
("pic/%S.png"),iの部分を("pic/0.png")と書き換えると正常に動作し、画像も表示されます。
_tcscpy_sをswprintfの変わりに使うと、同様に"pic/0.png"と直接書くと期待通りに動作するのですが、iの値を使おうとすると画像が表示されません。
いろいろ調べながら試したのですが、お手上げになりました。
どなたかアドバイスお願いします。

コード:

MainChar::MainChar(){ 
	
	WCHAR picPas[20];
	for(int i=0;i<9;i++){
		//_tcscpy_s(picPas,_countof(picPas),_T("pic/0.png"));
		swprintf(picPas,_T("pic/%S.png"),i);
		testImage[i] = new Image((picPas));
	}

};

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 11:53
by フィア
現在私はwin32APIはつかわわなくなってますが

swprintf(picPas,_T("pic/%S.png"),i);

この部分がおかしいのかと

基本だとは思いますが

i は int 型なのに 文字列表示用の %sに 入れようとしていることが問題なのではないかと
i を 文字列型に変えれば直るんじゃないですか?

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 11:54
by ホヅミ
もしかすると変数iはint型なのに%sで表示しようとしているからかもしれませんね。
%Sを%dに変えてみてはいかがでしょうか?

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 12:01
by フィア
今まで私は試した事はなかったのですがホヅミさんの方法でもできるのでしょうかね?

できるならそちらのほうが簡単に直せるかと思います。

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 14:06
by softya(ソフト屋)
%dが正しいと思います。printf系の書式は基本小文字ですよ。

でもC++なので、sstreamを使ったほうが良いんじゃないでしょうか?
「C++編(標準ライブラリ) 第32章 文字列ストリーム」
http://www.geocities.jp/ky_webid/cpp/library/032.html
ワイド文字はwostringstreamを使ってください。

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 17:45
by ISLe
ワイド文字に統一するなら
_T("文字列")
じゃなくて
L"文字列"
にしないとコンパイル設定によってはエラーになってしまうかと。

swprintfも標準じゃないほうですけどいいのでしょうかね。

Re: ワイド型の文字列の加工について質問です

Posted: 2013年4月16日(火) 19:16
by 奥兵
皆様の素早いお返事に感謝します。
%Sの部分を%dにすることで解決しました。
いろいろ試すうちに文字列だからsだろと、決めつけてしまっていたようです。
お蔭様で無事プログラムも動きました、皆様のアドバイスのお陰です。とても助かりましたありがとうございます。