这是我的实现版本。
https://bbs.eeworld.com.cn/thread-647068-1-1.html
我就不卖关子了。
这次的编程题如下
()strcpy()
{
}
说明一下,意思是,返回值 和 形参 也是我们定义的;
同时,函数体我们实现。
要求,什么memcpy strlen就不能用了,否则我还添的什么乱。
要求:考虑函数的稳健性。
几天后我会公布我自己的答案。老规矩,最早答对的,发芯币,除去常见无聊的指针有效性检查。
这个题其实在我看来,真正值得讨论的有2到3个点,因此一个点100个芯币,总共300芯币
本帖最后由 辛昕 于 2018-6-6 10:36 编辑
void strcpy(char *s_str , char *d_str , int len)
{
while(len--)
{
*d_str++ = *s_str++;
}
}
那改成这样:
int strcpy(char *s_str , char *d_str)
{
int char_cnt = 0;
while(*s_str != '\0') //把休止符前的字符复制过去
{
*d_str++ = *s_str++;
char_cnt++;
}
*d_str = *s_str; //把休止符复制过去,完成
return char_cnt //返回复制的有效字符数
}
char * strcpy(char * d_str,const char * s_str)
{
char * r=d_str;
if((d_str == NULL) || (s_str == NULL))
return NULL;
while((*r++ = *s_str++)!='\0');
return d_str;
}
本帖最后由 yang_alex 于 2018-5-17 12:12 编辑
这个某种程度上也算是指针有效性检查吧?避免这个问题的一个办法是先找到那个“\0” ,把一个指针指到之后的空间,然后开始复制。但也许后面空间也被其他数据或指针占据,又会出其他问题。
你好,不是太清楚这个意思,系统分配空间的话难道不会将d_str所指向的地址分配到字符串s_str的'\0'字符后面吗?
使用strcpy并不能假设一定会在两个不同的空间里操作——假如你是两个各自定义的数组,那自然不会出现空间交叠。
但是,你不能假设别人使用strcpy的方式,比如你不能防止别人会在 一个数组的不同位置进行拷贝复制。