当我在linux上运行我的程序时,程序工作正常。 fred.out
文件已创建。但是当我在Dev-C ++上运行它时,它不会写出输出文件。
我该如何解决这个问题?我一直在寻找和尝试几个小时。我尝试过包含多个库。这可能是一个安全问题吗?
这是我的代码:
#include <stdio.h>
int main(void)
{
FILE *fp_1;
float mat[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
fp_1 = fopen("fred.out","w");
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
fprintf(fp_1," %+10.2f\n",mat[j][i]);
fprintf(fp_1,"\n");
}
fclose(fp_1);
getch();
return 0;
}
编辑:
答案 0 :(得分:1)
在使用返回的指针之前,请务必检查fopen()
是否成功。否则,如果fopen()
失败(打开文件),则进一步使用返回的FILE *
functionnal programming。
此外,在fopen()
失败后,您可以查看errno
以确定失败背后的共鸣。
答案 1 :(得分:0)
在Windows和mingw上,您可能需要以二进制模式打开文件,在fopen模式中添加“b”:
fp_1 = fopen("fred.out","wb");
Edit2:正如Degustaf在评论中所说,您可以使用char * strerror(int errnum)
(包括errno.h和string.h)来了解错误是什么:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(void)
{
FILE *fp_1;
float mat[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
fp_1 = fopen("fred.out","w");
if(fp_1 == NULL) {
printf("\n%s",strerror(errno));
return 1;
}
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
fprintf(fp_1," %+10.2f\n",mat[j][i]);
fprintf(fp_1,"\n");
}
fclose(fp_1);
getch();
return 0;
}
编辑:您可以通过以下方式检查errno,包括errno.h,并检查名为“errno”的变量。在下面的示例中,未列出一些错误,因为fopen可以将errno设置为与malloc相同的错误,请参阅fopen,open和malloc的手册页以获取更多详细信息:
#include <stdio.h>
#include <errno.h>
void func_errno() {
switch(errno) {
case EACCES: printf("\nEACCES"); break;
case EEXIST: printf("\nEEXIST"); break;
case EFAULT: printf("\nEFAULT"); break;
case EFBIG: printf("\nEFBIG"); break;
case EINTR: printf("\nEINTR"); break;
case EISDIR: printf("\nEISDIR"); break;
case ELOOP: printf("\nELOOP"); break;
case EMFILE: printf("\nEMFILE"); break;
case ENAMETOOLONG: printf("\nENAMETOOLONG"); break;
case ENFILE: printf("\nENFILE"); break;
case ENODEV: printf("\nENODEV"); break;
case ENOENT: printf("\nENOENT"); break;
case ENOMEM: printf("\nENOMEM"); break;
case ENOSPC: printf("\nENOSPC"); break;
case ENOTDIR: printf("\nENOTDIR"); break;
case ENXIO: printf("\nENXIO"); break;
case EOVERFLOW: printf("\nEOVERFLOW"); break;
case EPERM: printf("\nEPERM"); break;
case EROFS: printf("\nEROFS"); break;
case EWOULDBLOCK: printf("\nEWOULDBLOCK"); break;
default: printf("\nOther error."); break;
}
}
int main(void)
{
FILE *fp_1;
float mat[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
fp_1 = fopen("fred.out","w");
if(fp_1 == NULL) {
func_errno();
return 1;
}
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
fprintf(fp_1," %+10.2f\n",mat[j][i]);
fprintf(fp_1,"\n");
}
fclose(fp_1);
getch();
return 0;
}
答案 2 :(得分:0)
我不确定出了什么问题,但是我将文件从我的拇指盘复制到我的硬盘驱动器上,并且编写文件没有问题。谢谢你们的所有答案!