strcat_s 和 strncat_s 使用

由于原来的strcat和strncat可能会产生栈溢出

所以新版的vs会提醒你换成更安全的函数strcat_s 和 strncat_s

strcat_s:三个参数 errno_t strcat_s(char * restrict dest,rsize_t destsz,const char * restrict src);

举例:

char *a = "12345";

char *b = (char*)malloc(6);

memset(b, 0, 6);
strcat_s(b, strlen(a) + 1, a);

如果想连接部分就要用到下面这个:

strncat_s :四个参数 errno_t strncat_s(char * restrict dest,rsize_t destsz,const char * restrict src,rsize_t count);

count:最大复制数

destsz:目标缓冲区大小。

写在最后:提醒自己的是,很久没写c代码了,很多库函数都不记得怎么用了,突然被要求用纯c写代码,指针都忘了注意事项了。

需要提醒的是,在用指针的时候,不要乱赋值!!!!!!!!,尤其赋值的东西后面还再用,可能就会篡改原值,所以最好先动态申请空间。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strncat_s是一个安全的字符串拼接函数,它和strcat_s函数类似,但是它可以指定最大拼接的字符数。其基本用法如下: ``` errno_t strncat_s( char *strDestination, size_t numberOfElements, const char *strSource, size_t count ); ``` 其中,strDestination是目标字符串缓冲区,numberOfElements是缓冲区的大小(以字节为单位),strSource是要拼接到目标字符串的源字符串,count是最大拼接的字符数。 使用strncat_s函数时,你同样需要保证目标字符串缓冲区足够大,以容纳目标字符串和源字符串的拼接结果。同时,你还需要指定最大拼接的字符数。如果实际需要拼接的字符数小于等于count,函数会将整个源字符串拼接到目标字符串中;如果实际需要拼接的字符数大于count,函数只会拼接源字符串的前count个字符到目标字符串中。 你同样可以通过检查返回值是否为0来判断函数是否执行成功。例如: ``` char dest[20] = "Hello"; const char *src = " world!"; errno_t err = strncat_s(dest, sizeof(dest), src, 6); if (err == 0) { printf("%s\n", dest); // 输出"Hello world" } else { printf("Error: %d\n", err); } ``` 在上面的例子中,我们同样定义了一个20字节大小的目标缓冲区,并将其初始化为"Hello"。然后,我们将源字符串" world!"拼接到目标字符串中,并指定最大拼接的字符数为6,即只拼接源字符串的前6个字符。由于目标缓冲区足够大,因此拼接操作会成功执行,输出结果为"Hello world"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值