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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
奥兵

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

#1

投稿記事 by 奥兵 » 7年前

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

};

フィア
記事: 82
登録日時: 7年前

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

#2

投稿記事 by フィア » 7年前

現在私はwin32APIはつかわわなくなってますが

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

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

基本だとは思いますが

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

ホヅミ
記事: 110
登録日時: 9年前

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

#3

投稿記事 by ホヅミ » 7年前

もしかすると変数iはint型なのに%sで表示しようとしているからかもしれませんね。
%Sを%dに変えてみてはいかがでしょうか?

フィア
記事: 82
登録日時: 7年前

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

#4

投稿記事 by フィア » 7年前

今まで私は試した事はなかったのですがホヅミさんの方法でもできるのでしょうかね?

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 7年前

%dが正しいと思います。printf系の書式は基本小文字ですよ。

でもC++なので、sstreamを使ったほうが良いんじゃないでしょうか?
「C++編(標準ライブラリ) 第32章 文字列ストリーム」
http://www.geocities.jp/ky_webid/cpp/library/032.html
ワイド文字はwostringstreamを使ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

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

#6

投稿記事 by ISLe » 7年前

ワイド文字に統一するなら
_T("文字列")
じゃなくて
L"文字列"
にしないとコンパイル設定によってはエラーになってしまうかと。

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

奥兵

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

#7

投稿記事 by 奥兵 » 7年前

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

閉鎖

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