这是我的代码:

#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删除注释,程序将运行。
但是,如果我从fseekfscanf中删除注释,程序将编译,但在运行时会崩溃。
不明白为什么。。。

最佳答案

您的呼叫已中断-更改:

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

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

重要提示:如果您在编译时启用了警告(例如fscanf),那么编译器将帮助您指出此错误,从而节省您的时间和精力。始终启用编译器警告并注意它们。
还有一件事:在代码中检查绝对没有错误——应该在gcc -Wall ...和所有其他可能失败的调用之后检查失败。

关于c - 同时使用fseek和fscanf会使程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29753621/

10-12 16:13