strcpy、strncpy、sprintf、snprintf、memcpy
从以下几个方面对比:
1.结束判断依据
strcpy(A,B):当B遇到\0时,结束。并且\0会被复制到A中。但不会判断A的长度,所以需要自行确保len(A)>=len(B)
strncpy(A,B,n):当B遇到\0或复制了n个字符时,结束。这个函数拷贝的是字符,不拷贝串,如果先遇到\0,则函数会把剩余的字符补\0,如果先满足n的条件,则需要自己处理结束符
sprintf:和strcpy的用法类似。
snprintf(A,n,"%s",B):复制n-1个字符或者先遇到B结束,则结束复制,会在结束时复制结束符。
memcpy:复制指定长度,不会自动添加结束符
2.越界判断
strcpy:不判断,需要用户自己处理
strncpy:根据输入长度判断
sprintf:不判断,需要用户自己处理
snprintf:根据输入长度判断
memcpy:更具输入长度判断
3.\0处理
strcpy:会以\0结束复制,并且复制\0到字符串中
strncpy:当遇到\0早于n个字节时,会复制\0到字符串中,否则不会
sprintf:和strcpy一样
snprintf:在strncpy的基础上,当被复制的字符串大于n-1时,则复制n-1个字符,且第n个字符复制\0
memcpy:没有\0处理