0905每日一练

strncpy strcpy memcpy strnprintf strlen 等字符串函数的用法和区别

答:
(1) strncpy函数:
strncpy 是C语言的库函数之一,来自 C语言标准库,定义于string.h,
声明:
char *strncpy(char *dest, const char *src, size_t n)
参数:
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
n – 要从源中复制的字符数。
返回值:
该函数返回最终复制的字符串。
(2) strcpy()函数是C语言中的一个复制字符串的库函数,声明:
char *strcpy(char *dst, const char *src);

const 修饰:源字符串参数用const修饰,防止修改源字符串;
空指针检查:源指针和目的指针都有可能会出现空指针的情况,所以应该对其进行检查;
为什么要设置ret 指针以及返回ret指针的位置[3],由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针;
以上所示[2]处,为简单的字符串的复制过程,正好表明strcpy函数遇到’\0’将会停止;

区别
strcpy只是复制字符串,但不限制复制的数量,很容易造成缓冲溢出。strncpy要安全一些。
strncpy能够选择一段字符输出,strcpy则不能。
strncpy可实现strcpy的字符串复制:
(3) memcpy函数
c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
函数原型:
void *memcpy(void *dest, const void *src, size_t n);

功能:
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

头文件:
C语言:#include<string.h>
C++:#include
返回值:
函数返回指向dest的指针。

说明:
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。

2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
3.memcpy 的操作对象不局限于某一类数据类型,或者说可 适用于任意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作性即可。

(4) strnprintf函数
int snprintf(char *str, int n, char * format [, argument, …]);
函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。
参数:str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。
函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。
(5) strlen函数
头文件:#include <string.h>
strlen()函数用来计算字符串的长度
其原型为:unsigned int strlen (char *s); s为指定的字符串
说明:返回s的长度,不包括结束符NULL。

猜你喜欢

转载自blog.csdn.net/guo_xyx/article/details/108499126