首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

字符串操作惯用函数和安全用法

2013-03-14 
字符串操作常用函数和安全用法1. snprintf()和sprintf()sprintf例子代码:void f(const char *p){char buf[

字符串操作常用函数和安全用法

1. snprintf()和sprintf()

sprintf例子代码:

void f(const char *p)
{
char buf[11]={0};

char *str = "hello world";
sprintf(buf,"%s",p); 
printf("%sn",buf);
}

对于以上sprintf的应用中,没有考虑到目的字符串的长度11,当拷贝到‘\0’是会发生缓冲区溢出的想象。为安全期间推荐使用snprintf

void f(const char *p)
{
char buf[11]={0};

char *str = "hello world";
sprintf(buf,11,"%s",p); 
printf("%sn",buf);
}

运行结果

hello worl

snprintf()函数中加入了拷贝限制书n,其中包括n-1个格式化字符串,第n个为结束符‘\0’。返回值表示了格式化字符串长度,不包括‘\0’。

我们一般将n设置为目的指针的所能存储字符的长度,,其中包括‘\0’


2. strcat(*dest, *src, size_t size)和strncatt(*dest, *src, size_t size)

strca()实现了两个字符串的连接,将src中的字符串连接在dest后,并且覆盖dest的‘\0’

strncat()实现了将两个字符串的连接,但是只能拷贝最多size个字符至dest,其中不包括‘\0’

这两个函数均有可能发生缓冲器溢出


3 char *strcpy(char *dest, const char *src)和.char *strncpy(char *dest, const char *src, size_t count) 

1. strcpy拷贝字符串src至dest,但是是遇见‘\0’停止,如果第二个字符串无结束符会遭遇segment fault,访问了非法或空地址

2. strncpy中直接拷贝n个字符至dest,并且包括‘\0’







热点排行