以下是我在以下链接中用gdb编写的程序:
https://www.onlinegdb.com/online_c_compiler
#include <stdio.h>
#include <string.h>
int main()
{
char abc[] = "love";
char *hon[100];
FILE *d, *e;
int n;
char c;
d = fopen("demo.txt", "r");
/*e = fopen("demo.txt", "w");*/
/*n = fputs(abc,e);*/
printf( "jhjhj n");
while ((n = getc(d)) != EOF)
{
printf( "kjkjkkj n");
if (n == 'a')
{
/*e = d;*/
/*n = putc('k',e);*/
}
}
printf("%s", abc);
printf("abcdefgh %d hjhjh %d", 5, 6);
putchar(abc[1]);
}
但是我在尝试执行此代码时遇到分段错误.
我经历了以下问题:
什么是分段错误?
分段错误是当我们尝试访问未分配的内存位置或程序无法访问或一个进程尝试访问另一个进程已经访问的内存位置时出现的错误。
所以,我认为在读写模式下打开同一个文件可能会导致这种情况,尽管我无法解释这是如何发生的。
因此,我评论了尝试以"写入"模式访问文件的部分。 即使在那之后,我也得到了相同的分段错误错误.
所以,我在代码的不同部分之前放了一些消息。 事实证明,我无法在打开之前收到消息。
我无法理解即使在注释掉以写入模式打开文件的部分之后,这里也可能违反内存规则的访问。
期待见解和帮助。
是因为文件不存在的原因吗?但是在这种情况下,在遇到EOF时,它应该退出while循环,但是为什么会出现错误呢?
您没有检查文件是否成功打开
d = fopen("demo.txt", "r");
如果失败d
将被NULL
,尝试从不存在的文件读取会导致段错误
n = getc(d) // segfault if d was not actually opened