70,040
社区成员
发帖
与我相关
我的任务
分享

[/quote]
你不是用一个for循环然后s1[i] = s2[i]吗,循环结束后,目标字符串s1[i] = '\0';把尾巴填上。

#undef __stpcpy
#undef stpcpy
#ifndef weak_alias
# define __stpcpy stpcpy
#endif
/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
char *
__stpcpy (dest, src)
char *dest;
const char *src;
{
char *d = dest;
const char *s = src;
/*没有考虑内存重叠的情况*/
do
*d++ = *s;
while (*s++ != '\0');
return d - 1;
}

#include <stdio.h>
#include <assert.h>
#include <string>
char* STRCPY(char* dest, const char* src){
assert((src != NULL)&&(dest != NULL));
char* pDest = dest;
do{
*dest = *src;
dest++,src++;
}while(*src != '\0');
return pDest;
}
int main(int argc, char** argv){
char szBuf[80] = "youdalfaoduandljfaa";
char szBuf1[80] = {0};
STRCPY(szBuf1, szBuf);
printf("%s\n%s\n", szBuf, szBuf1);
return 0;
}
这是一道比较经典的C笔试题,考点全在STRCPY函数里面,考点分为:
1、STRCPY必须返回char*
2、要有断言,对入参进行判断
3、copy循环体