如何修复 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
等文件。
您可以通过使用调试器单步执行函数轻松地自己发现这些错误。
我想获取用户输入以打开一个 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
等文件。
您可以通过使用调试器单步执行函数轻松地自己发现这些错误。