【问题标题】:fseek and fscanf crash the program when used at the same timefseek 和 fscanf 同时使用会导致程序崩溃
【发布时间】:2015-04-20 16:41:52
【问题描述】:

这是我的代码:

#include <stdio.h>

typedef struct dat{
    int broj;
    int sir;
}sir;

int main() {
    sir sir;
    FILE* fordat;
    int i=0;
    fordat = fopen("dattk.txt","w+");
    while(i<100) {
        i++;
        sir.broj = i;
        sir.sir=-i;
        fprintf(fordat,"%d %d", sir.broj, sir.sir);
    }

    // fseek(fordat,0,SEEK_SET);
    //rewind(fordat);    
    // fscanf(fordat,"%d %d",sir.broj,sir.sir);
    printf("%d% %d",sir.broj,c);
    fclose(fordat);

    return 0;
}

我正在学习 C,并制作了这个简单的文件读写示例程序......

如果我从 fseekrewindfscanf 中删除 cmets,程序就会运行。
但是,如果我从 fseekfscanf 中删除 cmets,程序会编译,但在运行时会崩溃。
不知道为什么...

【问题讨论】:

    标签: c scanf fseek


    【解决方案1】:

    您的fscanf 通话中断 - 更改:

    fscanf(fordat,"%d %d",sir.broj,sir.sir);
    

    到:

    fscanf(fordat,"%d %d",&sir.broj,&sir.sir);
    

    重要提示:如果您在编译时启用了警告(例如gcc -Wall ...),那么编译器会帮助您指出这个错误,从而节省您的时间和精力。始终启用编译器警告并注意它们。

    还有一件事:您的代码中绝对没有错误检查 - 您应该在 fopen 和所有其他可能失败的调用之后检查失败。

    【讨论】:

    • 是的,我正要补充一句关于错误检查的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多