初投稿です。
C/C++とOpenGLを使いxファイルを表示するプログラムを作っているのですが、テクスチャファイルを指定する方法でつまずいています。
xファイルのなかに
TextureFilename {
"hoge.bmp";
}
とモデルのテクスチャファイルを指定する記述があると思います。
今は、テクスチャ名の部分まで読み飛ばし
char name[256];
fscanf_s(xFile, "%s", &name, sizeof(name));
のような感じでテクスチャ名を読み込んでいるのですが、printfでnameを出力してみると"hoge.bmp";と表示されます。(この記述なら当然ですよね)
\"を使ってみたりしましたが「フフフフフ・」が表示されたり、"hoge.bmp";のままだったりします。
ダブルクォーテーションを含まずテクスチャ名(文字列)を読み込むにはどうすればいいのでしょうか。
初歩的な質問かつ分かりづらい説明だと思いますがご教授願えたら幸いです。
ダブルクォーテーションを含まずに文字列を読み取る方法について
Re: ダブルクォーテーションを含まずに文字列を読み取る方法について
scanf の書式を " \"%[^\"]" とすればよいでしょう。マサ さんが書きました: ダブルクォーテーションを含まずテクスチャ名(文字列)を読み込むにはどうすればいいのでしょうか。
Re: ダブルクォーテーションを含まずに文字列を読み取る方法について
オフトピック
まず、&nameではなくnameとするべきです。マサ さんが書きました:今は、テクスチャ名の部分まで読み飛ばし
char name[256];
fscanf_s(xFile, "%s", &name, sizeof(name));
のような感じでテクスチャ名を読み込んでいるのですが、
fscanfに誤った型のデータを渡すとundefined behaviorになります。
fscanf_sでもあまり良くない気がします。
…というのはC言語での話で、
scanf 関数の型フィールド文字によればVisual Studio言語のscanf系関数のsは配列が必要なので&nameが正しいのかな?
そもそも「配列の先頭要素へのポインタ」も「配列へのポインタ」もC言語では配列ではないのだけど…Visual Studio言語では違うのかな?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ダブルクォーテーションを含まずに文字列を読み取る方法について
お二方とも迅速な返信をして頂きありがとうございます。
かずまさんへ
返信の内容を試したところ、問題なくテクスチャ名が読み込めました。
適切な回答ありがとうございました。
みけCATさんへ
配列なら&なしでもエラーにならないんですね。
普通の変数で読み込んでた頃、よく&を付け忘れてエラーが出ていたので付けておくものだと思っていました。
また質問をすることがあるかもしれませんが、その時もどうかよろしくお願いします。
かずまさんへ
返信の内容を試したところ、問題なくテクスチャ名が読み込めました。
適切な回答ありがとうございました。
みけCATさんへ
配列なら&なしでもエラーにならないんですね。
普通の変数で読み込んでた頃、よく&を付け忘れてエラーが出ていたので付けておくものだと思っていました。
また質問をすることがあるかもしれませんが、その時もどうかよろしくお願いします。