开发 C 编译此代码,但在文件创建期间给出 err 3221225477

Posted

技术标签:

【中文标题】开发 C 编译此代码,但在文件创建期间给出 err 3221225477【英文标题】:Dev C compiles this code, but during file creation gives err 3221225477 【发布时间】:2019-08-08 09:22:02 【问题描述】:

我试图在假期做一些功课以跟上进度,但我陷入了这个错误

我尝试使用 GDB 和 Dev-C++ 进行编译,但由于不同的原因,它们都无法做到这一点

void creazioneFile(char s[12])

    FILE *fp;
    char cod[10],tit[20],autore[20],editor[20],nomeFile[20];
    int annoPub,risp;
    sprintf(nomeFile, "%s.txt",s);
    fopen(nomeFile,"w");
    if(fp==NULL)
        printf("Si e\' verificato un errore");
        return;
    
    do
        printf("\nInserire codice libro: ");
        scanf("%s",cod);
        printf("\nInserire titolo del libro: ");
        scanf("%s",tit);
        printf("\nInserire autore del libro: ");
        scanf("%s",autore);
        printf("\nInserire anno di pubblicazione del libro: ");
        scanf("%d",&annoPub);
        printf("\nInserire editore libro: ");
        scanf("%s",editor);
        fprintf(fp,"%s %s %s %d %s\n",cod,tit,autore,annoPub,editor);
        printf("Si vuole inserire un altro record (1=si/0=no):");
        scanf("%d",&risp);
    while(risp!=0);
    fclose(fp);

输出应该提供一个选项,可以根据需要重复循环,但它显示此错误并且程序强制我退出

【问题讨论】:

提示:不要在没有初始化的情况下声明变量。您不必将所有声明都放在函数之上(除非您使用的是过时的 C 变体)。需要时声明一个。在你的情况下,FILE *fp = fopen(nomeFile,"w"); 在你的sprintf 电话之后。 OT: scanf("%s" 真的非常糟糕,因为用户可能会溢出目标缓冲区。总是添加一个限制,比如 scanf("%19s" 甚至更好 - 使用 fgets 【参考方案1】:

您打开文件但不保存文件指针。所以你最终会写入一个未初始化的文件描述符。产生独特崩溃的好方法!应该是:

fp = fopen(nomeFile,"w");

PS:如果你注意编译器警告,这些问题很容易被发现!

【讨论】:

【参考方案2】:

我认为您要做的是打开变量nomeFile 指定的文件,然后将一些字符串写入所述文件。对fopen 的调用会返回一个文件句柄——您需要将它保存在fp 中!

代码仍然可以编译,因为语句本身是有效的——它的返回值永远不会被存储。

【讨论】:

以上是关于开发 C 编译此代码,但在文件创建期间给出 err 3221225477的主要内容,如果未能解决你的问题,请参考以下文章

此代码编译正常但文件未创建?请指出错误

Vue属性或方法未在实例上定义但在渲染期间引用?

使用GCC编译C代码

Eclipse 问题 - 编译期间不考虑在 .c 和 .cpp 文件中定义的预处理

尝试在 ldebug.c 中包含 httpclient.h 会导致编译期间出错

在使用 CocoaPods 编译期间包含一个目录作为搜索路径