本文主要介绍了C语言中strcpy()函数和strncpy()函数使用的详细说明,这是C语言入门学习中的基础知识。有需要的朋友可以参考一下。
C语言strcpy()函数:复制字符串
头文件:#include string.h
定义功能:
char *strcpy(char *dest,const char * src);
描述:strcpy()将把参数src字符串复制到参数dest指示的地址。
返回值:返回参数dest的字符串起始地址。
注意:如果参数dest指示的内存空间不够大,可能会导致缓冲区溢出的错误。写程序的时候请特别注意,或者用strncpy()代替。
模型
#包含字符串. h
main(){
char a[30]=' string(1)';
char b[]=' string(2)';
printf('before strcpy() :%s\n ',a);
printf('after strcpy() :%s\n ',strcpy(a,b));
}
执行结果:
strcpy()之前:字符串(1)
strcpy()之后:字符串(2)
C语言strncpy()函数:复制字符串的前n个字符
头文件:#include string.h
Strncpy()用来复制一个字符串的前N个字符,它的原型是:
char * strncpy(char *dest,const char *src,size _ t n);
【参数说明】dest是目标字符串指针,src是源字符串指针。
Strncpy()将字符串src的前n个字符复制到字符串dest。
与strcpy()不同,strncpy()没有将结束标记' \0 '附加到dest,这导致了许多不合理的问题,下面的示例将对此进行说明。
注意:src和dest引用的内存区域不能重叠,dest必须有足够的空间容纳N个字符。
[返回值]返回字符串dest。
【函数示例】复制四组字符串。
# includestdio.h
#includestring.h
int main(void){
char dest 1[20];
char src 1[]=' ABC ';
int n1=3;
char dest 2[20]=' * * * * * * * * * * * * * * * * * * * * * ';
char src 2[]=' ABC XYZ ';
int N2=strlen(src 2)1;
char dest 3[100]=' http://see . xidian . edu . cn/CPP/shell/';
char src 3[6]=' ABC XYZ ';//没有“\0”
int n3=20
char dest 4[100]=' http://see . xidian . edu . cn/CPP/u/马援/';
char src 4[]=' ABC \ 0 defghigk ';
int n4=strlen(src 3);
strncpy(dest1,src1,n1);//n1小于strlen(str1) 1,不会追加“\0”。
strncpy(dest2,src2,N2);//n2等于strlen(str2) 1,正好可以把src2末尾的' \0 '复制到dest2。
strncpy(dest3,src3,n3);//n3大于strlen(str3) 1,循环复制str3。
strncpy(dest4,src4,n4);//'\0 '出现在src4的中间
printf('dest1=%s\n ',dest 1);
printf('dest2=%s,dest2[15]=%c\n ',dest2,dest 2[10]);
printf('dest3=%s\n ',dest 3);
printf('dest4=%s,dest4[6]=%d,dest4[20]=%d,dest4[90]=%d\n ',dest4,dest4[6],dest4[20],dest 4[90]);
返回0;
}
VC6.0的运行结果:
MinGW操作结果:
从上面的运行结果可以看出,strncpy()很难控制,行为也很奇怪。使用strncpy()最安全方法是使n等于strlen(src) 1,也就是说,复制整个字符串并将' \0 '附加到dest。但这和strcmp()没什么区别。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。