首页 > 解决方案 > 如何修复 C 编程中的分段错误?

问题描述

我想让用户输入打开一个 txt 文件,但我收到了这个编译错误。[1] 85501 segmentation fault有人可以帮我弄这个吗?样本输入2021-10-17

这是 git repo https://github.com/anjula-sack/diary

    void DecryptEntry()
    {
      FILE *fptr;

      char filename[20];
      printf("Please enter the date of the entry you want to read, ex:2021-10-17\n");
      fscanf(stdin, " ");
      fgets(filename, 20, stdin);
    
      strcpy(filename, ".txt");
      printf("%s.txt", filename);
    
    
      if ((fptr = fopen(filename, "r")) == NULL)
      {
        printf("Error! the entry doesn't exist");
      }
    }

标签: cfgets

解决方案


查看来自您的 github 链接的实际代码,然后您将拥有:

strcpy(filename, ".txt");

if ((fptr = fopen(filename, "r")) == NULL)
{
  printf("Error! the entry doesn't exist");
}

fgets(message, 100, fptr);

首先,这strcpy是无稽之谈,因为它会覆盖文件名并将其替换为".txt". 由于这永远不是有效的文件名,fopen因此总是会失败。而当它失败时,你会打印一条错误消息但继续执行,所以下一次fgets调用将导致崩溃。

通过为文件名分配足够的空间,用(附加)替换strcpy(覆盖)并在无法打开文件时执行等来解决此问题。strcatreturn

通过使用调试器单步执行函数,您可以很容易地自己发现这些错误。


推荐阅读