OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

文字列をポインタに

  • すぐに回答を!
  • 質問No.156021
  • 閲覧数55
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 59% (34/57)

文字列型のデータをポインタ型のエリアに代入したいのですがどうしたらよいでしょうか?

char path[256];

char *INPUTFILE;

「char path」に"c:\windows\temp\inputfile.txt"という、入力ファイルへのパスが格納されているとします。
このデータを「char *INPUTFILE」に入れたいのです。
もしくは「char path」のデータを使って、ファイルをOPENさせる方法を教えてください。(この訊き方のほうがよかったかな?)
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル12

ベストアンサー率 41% (324/772)

ああっ、勘違い、、、でした、、、

INPUTFILE=(char *)malloc(strlen(path)+1);
strcpy(INPUTFILE, path);
でpathの中身をINPUTFILEへコピーできます。

最後に使いおわったら、
free(INPUTFILE);
も忘れずに!

でも、本当に「型が違ってエラー」なのでしょうか?
なんとなくpath内の「\」のエスケープのし忘れでファイルが見つからないなんてことは無いですよね?
お礼コメント
techtak

お礼率 59% (34/57)

私も勘違いでした。
INPUTFILE = path; で、出来ました。スイマセン(^^;

「\」のエスケープのし忘れはないのでご安心を。

mallocの方法も参考になりました。
何度もアドバイスしていただいて、ありがとうございました。
また、よろしくおねがいします。
投稿日時 - 2001-10-24 12:00:45
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 41% (324/772)

fp=fopen(path,"r+b") でファイルを開き、 fread(INPUTFILE, 1, filesize, fp) で読み込みます。 最後に忘れずに fclose(fp) でファイルポインタを開放します。 ただし、INPUTFILEはファイルを格納するのに十分なサイズが確保されている必要があります。 ...続きを読む
fp=fopen(path,"r+b")
でファイルを開き、
fread(INPUTFILE, 1, filesize, fp)
で読み込みます。
最後に忘れずに
fclose(fp)
でファイルポインタを開放します。

ただし、INPUTFILEはファイルを格納するのに十分なサイズが確保されている必要があります。
補足コメント
techtak

お礼率 59% (34/57)

char pathでは型が違ってエラーとなってしまうので、
char *INPUTFILEに代入したいのです。
つまり、

fp=fopen(INPUTFILE,"r"); /*「INPUTFILE」には入力ファイルへのパスが格納されている。*/


というような文でファイルをopenさせたいのです。
ちょっと、説明が足りなかったですね(^^;
すみません。
投稿日時 - 2001-10-23 14:39:47
  • 回答No.2
レベル9

ベストアンサー率 53% (52/98)

fopen の第一引数の型は const char * なので、 本当にこの宣言をしているのであれば、 fp = fopen(path, "r+b"); の書き方でまちがいないはずです。 というか、 char * INPUTFILE; であるならば、 INPUTFILE = path; fp = fopen(INPUTFILE, "r+b"); で ...続きを読む
fopen の第一引数の型は const char * なので、
本当にこの宣言をしているのであれば、
fp = fopen(path, "r+b");
の書き方でまちがいないはずです。
というか、
char * INPUTFILE;
であるならば、
INPUTFILE = path;
fp = fopen(INPUTFILE, "r+b");
でも同じになるはずです。
(もしかすると、 fp = fopen((const char *)path, ... とかする必要がある?)

INPUTFILE = path;
は、データの入っている場所の先頭(path == &path[0})をINPUTFILE という場所専用の変数に代入していることになります。

もし、path[256] の中身を
char path[256] = "c:\windows\ ...";
のように設定しているのであれば、
char path[256] = "c:\\windows\\ ...";
にする、とかが必要かも知れません。

C の処理系(パス名から察するにWindows の処理系?だと全然知らないのですが) と、具体的なソース、それに「型が違う」と言われたメッセージの中身をくわしく教えていただけると、もうすこし具体的なお答えが返って来ると思います。
お礼コメント
techtak

お礼率 59% (34/57)

すみません!
INPUTFILE = path;できました。(^^;
以前同じようなことをした時、なぜかコンパイルエラーになったので
出来ないものだと思ってたんです。

fp = fopen(path, "r+b");でも出来るとのことですが、
pathはポインタ型で宣言してないので、やはり出来ないです。

それからパスの中身は
char path[256] = "c:\\windows\\ ...";
にしてますのでこちらは大丈夫です。

たいへんお騒がせしました。
アドバイスありがとうごさいました。
投稿日時 - 2001-10-24 11:52:07
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ