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

来源:互联网 发布:陈振濂的书法 知乎 编辑:程序博客网 时间:2024/05/04 02:25

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';
0 0