微软的字符串拷贝:
char * cdecl strcpy(char * dst,const char * src)
{
char *cp = dst;
while(*cp++ = *src++);
return dst;
}
执行效率高,但漏洞多
比较完备的字符串拷贝:
char * strcpy(char * dst,const char * src)
{
char *cp = dst;
assert(dst != NULL && src != NULL);
while(*src != '\0')
*cp++ = *src++;
*cp = '\0';
return dst;
}
在使用字符串拷贝产生的问题:
#include<iostream>
#include<stdio.h>
int main(void)
{
char s[] = "123456789";
char d[] = "1234";
strcpy(d,s);
printf("%s,\n%s",d,s);
return 0;
}
输出:123456789, 6789
原因:程序分配内存地址是连续内存的问题
存储:1234\0123456789\0
拷贝:123456789\06789\0
经验:分配空间要给源字符串和目标字符串预留足够的空间