C:fopen()始终返回NULL

时间:2013-12-09 22:14:48

标签: c fopen

我不知道发生了什么,但每次用fopen打开文件时都会返回NULL 但如果我尝试打印地址,它的打印有效地址 如果我尝试读取写入其他文件没有发生任何事情,我以“w”模式打开它,我打开了所有用户的所有权限。

enter image description here

3 个答案:

答案 0 :(得分:2)

在路径名中使用\\而不是//。在C字符串内部时,不需要将斜杠(/)符号写入两次。另一方面,如果在C字符串中使用反斜杠符号(\),则必须将其写入两次,以免与转义字符混淆。

我不确定,但我认为Windows也接受/作为文件名的目录分隔符。

答案 1 :(得分:1)

你正在混淆语法 - 其中任何一个都应该有效:

fp = fopen("D:\\shortcut\\asd.jpg", "r");

fp = fopen("D:/shortcut/asd.jpg", "r");

答案 2 :(得分:1)

有一些错误。

  • fetc()返回一个int,而不是一个char,将fgetc()返回值赋给char会使得无法将EOF与文件中的实际字节区分开来。

  • 你正在打开二进制文件,所以你需要告诉fopen()这个事实,默认是以文本模式打开文件。

  • //不是Windows上的目录分隔符,\/是。由于\需要在C字符串文字中转义,因此需要\\

  • 您应该检查fopen是否成功,如果失败则发出相关错误。

  • 您应该发布代码,而不是代码截图。

执行:

FILE *fp, *dest;
int c;

if ((fp = fopen("D:\\shortcut\\asd.jpg", "rb")) == NULL) {
    perror("fp fopen");
    return 1;
}
if ((dest = fopen("D:\\sssssssssssss.jpg", "wb")) == NULL) {
    perror("dest fopen");
    return 1;
}

while ((c = fgetc(fp)) != EOF) {
  putc(c, dest); //might even want to check if putc fails.
}

fclose(dest);
fclose(fp);

return 0;