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)
如果把代码中的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的使用内存,很容易导致缓冲区溢出。
while的第一个是将s指向的字符串的s移动到字符串的最后一个字符后面('\0')之后就是将t指向的内容读取附给s指向的字符串的尾部(之前的循环s已经指向了第一个字符串的尾部)最后返回p,之前的p指向了第一个字符串的开头,大概思路就是这个,但是有个问题,这个程序容易造成内存溢出