在C语言中读取文件时出现分段错误

在C语言中读取文件时出现分段错误,c,C,所以我有这段代码,但每次我运行它,我都会得到分段错误或错误“error!”。无论我做什么,这种事总是发生在我身上 #include <stdio.h> #include <stdlib.h> int main() { FILE *fin=fopen("text.txt","r"); if(fin==NULL) { printf("ERROR"); retu

所以我有这段代码,但每次我运行它,我都会得到分段错误或错误“error!”。无论我做什么,这种事总是发生在我身上

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fin=fopen("text.txt","r");
    if(fin==NULL)
    {
        printf("ERROR");
        return -1;
    }
    return 0;
}
#包括
#包括
int main()
{
文件*fin=fopen(“text.txt”,“r”);
如果(fin==NULL)
{
printf(“错误”);
返回-1;
}
返回0;
}

我忽略了分段错误,因为没有应该生成分段错误的代码

但是,如果将
ERROR
作为输出,则无法打开文件。根据您的环境,您的可执行文件可能不会从您期望的文件所在的目录运行,因此基本上有两个选项

  • 将文件放在已知目录中,并指定完整路径(用于调试的helpfull):
  • #包括
    #包括
    int main()
    {
    FILE*fin=fopen(“/fullpath/text.txt”,“r”);
    如果(fin==NULL)
    {
    printf(“错误”);
    返回-1;
    }
    返回0;
    }
    
  • 或者您可以确定当前目录并将文件放在那里
  • #包括
    #包括
    #包括
    int main()
    {
    文件*fin=fopen(“text.txt”,“r”);
    如果(fin==NULL)
    {
    char cwd[PATH_MAX];
    getcwd(cwd,sizeof(cwd)-1);
    printf(“在路径%s\n中找不到错误文件”,cwd);
    返回-1;
    }
    返回0;
    }
    
    请键入此代码以查看错误的确切原因

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    int main()
    {
        FILE *fin=fopen("text.txt","r");
        if(fin==NULL)
        {
            printf("%s",strerror(errno));
            return -1;
        }
        return 0;
    }
    
    #包括
    #包括
    #包括
    #包括
    int main()
    {
    文件*fin=fopen(“text.txt”,“r”);
    如果(fin==NULL)
    {
    printf(“%s”,strerror(errno));
    返回-1;
    }
    返回0;
    }
    
    发布的代码可能会产生“错误”,但决不会产生“错误!”。确保您发布的内容与您正在运行的内容完全一致,并且您的构建是正确的,并且您正在运行您认为是的二进制文件。然后,如果你得到一个SEGV,在你的调试器中运行它,它会准确地告诉你它发生在哪里。Fmmm,听起来你的环境坏了。你的文件不存在。为了清楚起见,代码中没有任何东西会导致分段错误。因此,要么代码与您正在运行的代码不匹配,要么正如MikeCAT所说,您的环境出现了严重问题。您显示的代码是否是导致您出现问题的实际代码?特别是关于坠机的问题?@RaduCondrat问了一个关于
    while(feof(fin))
    的新问题,并给出了一个更简单的答案:;-)
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        FILE *fin=fopen("text.txt","r");
        if(fin==NULL)
        {
            char cwd[PATH_MAX];
            getcwd(cwd, sizeof(cwd)-1);
            printf("ERROR. File not found in path %s\n", cwd);
            return -1;
        }
        return 0;
    }
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    int main()
    {
        FILE *fin=fopen("text.txt","r");
        if(fin==NULL)
        {
            printf("%s",strerror(errno));
            return -1;
        }
        return 0;
    }