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