Dev-C ++不会将输出文件写入磁盘

时间:2015-05-27 10:14:55

标签: c linux file file-io dev-c++

当我在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;
}

编辑:

after entering a fopen() check

3 个答案:

答案 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)

我不确定出了什么问题,但是我将文件从我的拇指盘复制到我的硬盘驱动器上,并且编写文件没有问题。谢谢你们的所有答案!