strcpy、 strncpy 和snprintf

本文详细解析了strcpy、strncpy和snprintf三个字符串操作函数的特点及使用方法,并对比了它们之间的区别,帮助开发者理解如何正确选择和使用这些函数以避免常见的编程错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Strcpy、 strncpy 和snprintf

strcpy:字串复制

  原型:char *strcpy(char *dest, char *src);

  功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。

  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

  返回指向dest的指针。

  注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。

因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串。

 

strncpy的正确用法:
strncpy(dest, src, sizeof(dest))
dest[sizeof(dest)-1] = ‘\0';

snprintf的正确用法:
snprintf(dest, sizeof(dest), "%s", src);

strncpy的问题:
1.size一定要用sizeof(dest)sizeof(dest)-1,不可误用sizeof(src).
2.
手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度小于dest时,对剩余的字节填
0.
3.
性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。

4.
返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。

snprintf的问题:
1.不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core
2.
性能问题。当src长度远大于dest时,由于snprintf要返回src的字节数,需要扫描src,会有很大的性能损失。

3.
返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。

总结:
1.snprintf使用比strncpy简洁。
2.snprintf
可以获取被拷贝的字节数。

3.
二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf

 

snprintf(s,len,"%s...",char);strncpy(char,const char,len);

snprintflen包括'/0',,,,,,,,,,strncpylen不包括‘/0’,就指具体的字符串长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值