- ベストアンサー
文字列をポインタに
文字列型のデータをポインタ型のエリアに代入したいのですがどうしたらよいでしょうか? char path[256]; char *INPUTFILE; 「char path」に"c:\windows\temp\inputfile.txt"という、入力ファイルへのパスが格納されているとします。 このデータを「char *INPUTFILE」に入れたいのです。 もしくは「char path」のデータを使って、ファイルをOPENさせる方法を教えてください。(この訊き方のほうがよかったかな?)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ああっ、勘違い、、、でした、、、 INPUTFILE=(char *)malloc(strlen(path)+1); strcpy(INPUTFILE, path); でpathの中身をINPUTFILEへコピーできます。 最後に使いおわったら、 free(INPUTFILE); も忘れずに! でも、本当に「型が違ってエラー」なのでしょうか? なんとなくpath内の「\」のエスケープのし忘れでファイルが見つからないなんてことは無いですよね?
その他の回答 (2)
- tailkuppa
- ベストアンサー率53% (52/98)
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 の処理系?だと全然知らないのですが) と、具体的なソース、それに「型が違う」と言われたメッセージの中身をくわしく教えていただけると、もうすこし具体的なお答えが返って来ると思います。
お礼
すみません! INPUTFILE = path;できました。(^^; 以前同じようなことをした時、なぜかコンパイルエラーになったので 出来ないものだと思ってたんです。 fp = fopen(path, "r+b");でも出来るとのことですが、 pathはポインタ型で宣言してないので、やはり出来ないです。 それからパスの中身は char path[256] = "c:\\windows\\ ..."; にしてますのでこちらは大丈夫です。 たいへんお騒がせしました。 アドバイスありがとうごさいました。
- selenity
- ベストアンサー率41% (324/772)
fp=fopen(path,"r+b") でファイルを開き、 fread(INPUTFILE, 1, filesize, fp) で読み込みます。 最後に忘れずに fclose(fp) でファイルポインタを開放します。 ただし、INPUTFILEはファイルを格納するのに十分なサイズが確保されている必要があります。
補足
char pathでは型が違ってエラーとなってしまうので、 char *INPUTFILEに代入したいのです。 つまり、 fp=fopen(INPUTFILE,"r"); /*「INPUTFILE」には入力ファイルへのパスが格納されている。*/ というような文でファイルをopenさせたいのです。 ちょっと、説明が足りなかったですね(^^; すみません。
お礼
私も勘違いでした。 INPUTFILE = path; で、出来ました。スイマセン(^^; 「\」のエスケープのし忘れはないのでご安心を。 mallocの方法も参考になりました。 何度もアドバイスしていただいて、ありがとうございました。 また、よろしくおねがいします。