C语言字符串处理库函数(部分)

sizeof和strlen的区别

1.sizeof是一个操作符,strlen是库函数。

2.sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0’的字符串作参数。

3.编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。(数组作为函数的参数退化为指针,是一种隐式转换

 

strcpy、memcpy、sprintf

1、复制的内容不同。strcpy 只能复制字符串,而 memcpy 可以复制任意内容,例如字符数组、整型、结构体、类等。sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串。

2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

3、用途不同。通常在复制字符串时用 strcpy,而需要复制其他类型数据时则一般用memcpy。sprintf主要实现其他数据类型格式到字符串的转化。

4、执行效率不同。memcpy最高,strcpy次之,sprintf的效率最低。

 

strcpy&strncpy

1) 函数原型

char* strcpy(char* strDest, const char* strSrc)

char* strncpy(char* strDest, const char* strSrc, int pos)

  

2) strcpy函数: 如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。

    strncpy函数:用来复制源字符串的前n个字符,src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置n个字符。

 

3) 如果目标长>指定长>源长,则将源长全部拷贝到目标长,自动加上’\0’。

    如果指定长<源长,则将源长中按指定长度拷贝到目标字符串,不包括’\0’。

    如果指定长>目标长,运行时错误 。

posted @ 2021-08-29 22:39  默行于世  阅读(95)  评论(0编辑  收藏  举报