ダブルクォーテーションを含まずに文字列を読み取る方法について

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

ダブルクォーテーションを含まずに文字列を読み取る方法について

#1

投稿記事 by マサ » 9年前

初投稿です。

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: ダブルクォーテーションを含まずに文字列を読み取る方法について

#2

投稿記事 by かずま » 9年前

マサ さんが書きました: ダブルクォーテーションを含まずテクスチャ名(文字列)を読み込むにはどうすればいいのでしょうか。
scanf の書式を " \"%[^\"]" とすればよいでしょう。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ダブルクォーテーションを含まずに文字列を読み取る方法について

#3

投稿記事 by みけCAT » 9年前

オフトピック
マサ さんが書きました:今は、テクスチャ名の部分まで読み飛ばし
char name[256];
fscanf_s(xFile, "%s", &name, sizeof(name));
のような感じでテクスチャ名を読み込んでいるのですが、
まず、&nameではなくnameとするべきです。
fscanfに誤った型のデータを渡すとundefined behaviorになります。
fscanf_sでもあまり良くない気がします。

…というのはC言語での話で、
scanf 関数の型フィールド文字によればVisual Studio言語のscanf系関数のsは配列が必要なので&nameが正しいのかな?
そもそも「配列の先頭要素へのポインタ」も「配列へのポインタ」もC言語では配列ではないのだけど…Visual Studio言語では違うのかな?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

マサ
記事: 4
登録日時: 9年前

Re: ダブルクォーテーションを含まずに文字列を読み取る方法について

#4

投稿記事 by マサ » 9年前

お二方とも迅速な返信をして頂きありがとうございます。

かずまさんへ
返信の内容を試したところ、問題なくテクスチャ名が読み込めました。
適切な回答ありがとうございました。

みけCATさんへ
配列なら&なしでもエラーにならないんですね。
普通の変数で読み込んでた頃、よく&を付け忘れてエラーが出ていたので付けておくものだと思っていました。

また質問をすることがあるかもしれませんが、その時もどうかよろしくお願いします。

閉鎖

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