如何修复 C 编程中的分段错误?

How to fix segmentation error in C programming?

我想获取用户输入以打开一个 txt 文件,但我遇到了调用此编译错误。 [1] 85501 segmentation fault 有人可以帮我解决这个问题吗?示例输入 2021-10-17

这是 git 回购 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");
      }
    }

查看您 github link 中的实际代码,然后您会得到:

strcpy(filename, ".txt");

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

fgets(message, 100, fptr);

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

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

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