人生のプチ美学を教えてください!!

先ほど似た質問をしたのですが、勘違いしていたので質問しなおさせてください。

typedef struct file{
FILE *fp;
char *filename;
}sFILE;

sFILE fp[5];

for(i=0;i<5;i++){
fp[i].fp=NULL;
sprintf(fp[i].filename,"file(%d).txt",i);
}

とsprintfでファイル名を確保したいんですが、
sprintf(fp[i].filename,"file(%d).txt",i);
の第一引数がこれではダメなようです。
なんとなく、ダメなのは分かるんですがアドレスについてなど分からないことが多くどうしたらいいのかわかりません。
アドバイス等お願いします。

A 回答 (2件)

上記ソースではfp[i].filenameはただのポインタで、かつ初期化されていません。


ということで、fp[i].filenameの実体がなく、どこともいえないメモリに書き込もうとしたからダメだったのです。malloc等で必要なメモリを確保するか、ポインタではなくchar型の配列として宣言しましょう。

あと、この形式でsFILE fp[5];という変数名にはかなり違和感があります。予約語ではないので問題があるわけではありませんが、他人が読むと混乱するのは間違いないです。sfpとかでもいいので、少しでも違いをつけましょう。
    • good
    • 0

FILE *fp;


fp = fopen("xxx");
です。
なのに"file0.txt"という文字列の先頭アドレスを入れようとしているのでエラーです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!