str家族

不受限制的字符串函数,比如说strcpy、strcmp等等,我们最常用的字符串函数都是不受限制的,只是通过寻找字符串参数结尾的NULL字节来判断它的长度。那么什么是受限制的字符串函数呢?通过下面的例子我们来一起详细了解一下

strcpy:

原型:char *strcpy( char *strDestination, const char *strSource );

这个函数把参数src字符串复制到dest参数中,在使用这个函数时需要注意,首先,必须保证目标字符数组的空间足以容纳需要复制的字符串,为什么呢?如果字符串比数组长,多余的字符仍然会被复制,这就导致它们会覆盖原先存储在数组后面的内存空间的值。其次,目标参数应该是可被修改的,所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针。

1.strcpy模拟实现:

1
2
3
4
5
6
7
8
9
10
11
char *my_strcpy(char *dest, const char *src)
{
    char *ret = dest;
    assert(src != NULL);
    assert(dest != NULL);
    while (*dest++ = *src++)
    {
        ;
    }
    return ret;
}

  strncpy:  把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest。 

  上面是不受限制的字符串函数,那么为什么会有strncpy这样一类受限制的字符串函数呢?

就拿这两个函数来说,strcpy只是复制字符串,但不限制复制的数量,很容易造成缓冲溢出。strncpy要安全一些。strncpy能够选择一段字符输出,strcpy则不能。

下面是strncpy模拟实现:

1
2
3
4
5
6
7
8
9
10
11
12
char *my_strncpy(char *dest, const char *src, int n)
{
    char *ret = dest;
    assert(dest);
    assert(src);
    while (n--)
    {
        *dest++ = *src++;
    }
        *dest = '\0';
    return ret;
}


2.将两个字符串连接,我们可以使用strcat函数

函数原型:

char *strcat( char *strDestination, const char *strSource );

功能:

把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。

说明:

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

返回指向dest的指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char *my_strcat(char *dest, const char *src)
{
    char *ret = dest;
    assert(src != NULL);
    assert(dest != NULL);
    while (*dest)
    {
        dest++;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值