明天要去参加实习面试,复习的时候偶然看到库函数实现,觉着应该会问到,就看了下。发现自己其实对很多常用函数根本不懂其源码实现过程,所以明显错误就一犯再犯。
strcpy的源码如下
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
这个函数非常简洁,所以很多细节就要使用者注意了,总结如下:
1、一定要保证dst空间大于src
2、src指针一定要有‘\0’空字符结束标志,否则要被复制的内容是从src起始地址一直到dst起始地址,大小具有任意性,如下面这段代码就是错误的!
char string[10],str[10]; int i; for (int i=0;i<5;i++) { str[i]='a'; } strcpy(string,str);