fseek和fscanf在同时使用时会崩溃程序

时间:2015-04-20 16:41:52

标签: c scanf fseek

所以这是我的代码:

#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删除评论,程序就会运行。
但是,如果我从fseek AND fscanf删除了该程序编译的注释,但在运行时崩溃。
无法弄清楚为什么......

1 个答案:

答案 0 :(得分:3)

您的fscanf来电已被破坏 - 更改:

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

为:

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

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

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