2 qq 37130151 qq_37130151 于 2017.01.04 10:49 提问

c语言问题不知道为啥是这样

1、下面函数的功能是将两个字符串s和t连接起来。
char *conj(char *s, char *t)
{
char *p=s;
while(*s)____________;
while(*t)
{
*s=____________;
s++;
t++;
}
*s=’\0’;
____________;
}
答案:s++
*t
return(p)

2个回答

Tiger_Zhao
Tiger_Zhao   Rxr 2017.01.04 11:02
已采纳

如果把代码中的p和s交换一下,应该更好理解

char *conj(char *s, char *t)
{
char *p=s;
while(*p) p++; // p指向s字符串的末尾(\0 字符处)
while(*t) // 把t字符串的内容逐个字符复制到s字符串的后面
{
*p=*t;
t++;
t++;
}
*p='\0'; // 添加结束 \0
return (s); // 返回扩充后的s字符串
}

果真是不负责任的考试题。
这个函数直接修改了s字符串不说,还随意扩充了s的使用内存,很容易导致缓冲区溢出。

qq_37130151
qq_37130151 为啥会益处
11 个月之前 回复
KinoluKaslana
KinoluKaslana   2017.01.04 10:53

while的第一个是将s指向的字符串的s移动到字符串的最后一个字符后面('\0')之后就是将t指向的内容读取附给s指向的字符串的尾部(之前的循环s已经指向了第一个字符串的尾部)最后返回p,之前的p指向了第一个字符串的开头,大概思路就是这个,但是有个问题,这个程序容易造成内存溢出

qq_37130151
qq_37130151 为啥会益处
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!