种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

strlcpy

(2019-10-12 12:25:05) 百科综合
strlcpy

strlcpy

C语言标準库函式strlcpy,是更加安全版本的strcpy函式,在已知目的地址空间大小的情况下,把从src地址开始且含有'\0'结束符的字元串複製到以dest开始的地址空间,并不会造成缓冲区溢出。

基本介绍

  • 中文名:strlcpy
  • 外文名:strlcpy
  • 功能:字元串複製
  • 头档案:string.h
  • 返回值类型:size_t

C语言函式

函式原型声明:size_t strlcpy(char *dest, const char *src, size_t size)
头档案引用:#include <string.h>
功能: 在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字元串複製到以dest开始的地址空间
返回值:src字元串的大小
函式参数:参数dest为目的字元串开始的指针,src为源字元串的开始地址,参数size代表dest字元串的大小

功能说明

strlcpy函式创建的目的主要是针对strcpy函式缓冲区溢出的问题,因为一旦strcpy调用中src的字元串长度超过了dst的缓冲区大小,就会造成缓冲区安全漏洞问题,这是一类常见也严重的计算机安全漏洞。当然strcat函式也有安全版本的strlcat函式。

与strncpy区别

类似的函式还有strncpy,但是strlcpy常常是更加安全地选择,因为strlcpy在複製之后dst字元串一定会以'\0'字元结尾。代码说明如下
#include <string.h>#include <stdio.h>int main(){    char buf[5];    char src[10] = "12345678";    strlcpy(buf, src, sizeof(buf));    printf("%s\n",buf);//输出1234    return 0;}
上述示例中buf字元串最终结果是“1234\0”,以结束字元结尾,而如果同样地情况下使用strncpy函式,代码如下
#include <string.h>#include <stdio.h>int main(){    char buf[5];    char src[10] = "12345678";    strncpy(buf, src, sizeof(buf));    printf("%s\n",buf);    return 0;}
这个时候buf最终结果就是"12345",并没有以结束字元结尾。

标 签

搜索
随机推荐

Powered By 种豆资源网||