我在教小弟弟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 64bit OS)
以上代码是否相同?如果是这样,为什么在代码2中给出seg.fault?请帮忙 。
最佳答案
char *p;
int l=0;
char *cptr;
gets(p);
在两个程序中均未初始化
p
指针,您正在将随机值传递给gets
:它会调用未定义的行为。在某些情况下可能会起作用,而在其他情况下可能会崩溃。当然,C中不推荐使用
gets
,应避免使用它。