我在整個web上搜索了大部分fopen問題,但都無濟於事。我試圖用fopen打開一個文件。以下是我的部分代碼:在c中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);
我使用Visual Studio express 2012作爲我的IDE。當我運行這個沒有調試。它在打印連接的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,因爲它不打印的指針。
向我們展示'concat()的代碼' – ctn
你從哪裏得到'fname'和'path'的值? –
'sizeof(path)'將是指針的大小,如果path是'char *'類型的話。也許你的意思是'strlen(path)+ strlen(fname)+ 1'。 – ctn