我在向我弟弟教 C 指针时遇到了这个问题。该代码的目的是使用 gets() 或 scanf() 读取一个简单的字符串,并给出给定字符串的前 4 个字符作为输出。
给出了两个版本的代码:
代码1:
char *p;
char *cptr;
gets(p);
cptr = p;
printf("%c",*(cptr));
printf("%c",*(++cptr));
printf("%c",*(++cptr));
printf("%c",*(++cptr));
代码2:
char *p;
int l=0;
char *cptr;
gets(p);
cptr = p;
printf("%c",*(cptr));
while(l!=3)
{
printf("%c",*(++cptr));
l++;
}
如果我给出任何输入,代码 1 给出正确答案,但代码 2 给出段错误。我无法找到问题所在。为了确定起见,我尝试了长度超过 4 的输入。输入都是单个单词,因此不涉及空格。
使用的编译器:GCC 4.4(ubuntu 14.04 64位操作系统)
上面的代码不是一样吗?如果是这样,为什么它在代码 2 中给出 seg.fault ?请帮忙 。
最佳答案
char *p;
int l=0;
char *cptr;
gets(p);
p
指针在您的两个程序中均未初始化,您正在将随机值传递给 gets
:它会调用未定义的行为。它可能在某些情况下有效,而在其他情况下崩溃。
当然,gets
在 C 中已被弃用,应避免使用。
关于c - 使用 while 循环的简单程序出现段错误,但扩展时没有错误。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183102/