C 可指定长度的字符串函数

C 可指定长度的字符串函数

头文件

string.h

函数原型

char *strncpy(char *dst, char const *src, size_t len);
char *strncat(char *dst, char const *src, size_t len);
int  strcmp(const char *s1, const char *s2, size_t len);

后面len可指定函数需要处理src中多长的子串。

注意事项

注意strncpy这个函数:

  • 如果指定长>源长,则将源长全部拷贝到目标长,自动加上’\0’
  • 如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括’\0’
  • 如果指定长>目标长,error happen!

也就是说,此函数不保证复制过去的字符串以’\0’结束。这会导致未定义的行为。看代码:

/**
*    OS: win7
*   IDE: DEV C++ 4.9.9.2
**/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char string[2];
    strncpy(string,"123",1);
    printf("%d\n", strlen(string)); // 5
    return EXIT_SUCCESS;
}

可见,系统因字符串结尾丢失’\0’而无法准确的统计出字符串的长度。这里有个建议的写法,可有有效防止范围溢出以及丢失’\0’的发生:

char buffer[BUFFER_SIZE];
...
strncpy(buffer, name, BUFFER_SIZE);
buffer[BUFFER_SIZE - 1] = '\0';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值