私はウェブ全体でほとんどの fopen の質問を検索しましたが、役に立ちませんでした。fopenでファイルを開こうとしています。以下は私のコードの一部です:
FILE *filep = NULL;
FILE *Compilation = NULL;
printf("%s\n", fname);
char *pfname = (char*)malloc(sizeof(path) + sizeof(fname));
pfname = concat(path, fname);
printf("%s\n", pfname);
filep = fopen(pfname,"r");
if (filep == NULL){
printf("opening file failed: %s\n", strerror(errno));
}
printf("%p\n", filep);
IDE として Visual Studio Express 2012 を使用しています。これをデバッグなしで実行すると。連結されたpfnameを出力した後にクラッシュします。ただし、これをデバッグモードで実行すると機能します。filepは NULL を返さず、メモリ アドレスを出力します。printf の後に別の fopen があり、デバッグモードでも機能します。何が起こっているのか理解するのを手伝ってくれる人はいますか? ファイルはそこにあり、権限は正しいです。これはコードの新しいリビジョンですが、追跡されていない変更の前は fopen が機能していました。前もって感謝します。
改訂されたコード
FILE *filep = NULL;
FILE *Compilation = NULL;
printf("%s\n", fname);
char *pfname = (char*)malloc(strlen(path) + strlen(fname) + 1);
pfname = concat(path, fname);
printf("%s\n", pfname);
filep = fopen(pfname,"r");
if (filep == NULL){
printf("opening file failed: %s\n", strerror(errno));
}
printf("%p\n", filep);
char *newfile = (char*)malloc(strlen(path) + 11);
newfile = concat(path, "Result.txt");
Compilation = fopen(newfile, "a");
ポインターを出力しないため、まだ fopen を通過できません。