c语言中的字符串函数以及内存函数

目录

c语言中关于字符串相关的库函数:

strlen

strcpy

strcat

strcmp

strncpy

strncat

strncmp

strstr

strtok

strerror

字符分类函数:

字符转换:

tolower

toupper

内存操作函数

memcpy

memmove

memcmp


c语言中关于字符串相关的库函数:

strlen

size_t strlen ( const char * str );

可以计算一个字符串的长度,包含在string.h的头文件里,从传入地址开始,到 '\0' 结束,返回这段字符串的长度,返回值为unsigned int

strcpy

char* strcpy(char * destination, const char * source );

可以将source这个地址处开始到下一个 '\0' 处结束的字符串拷贝到目标地址destination开始向后同样长度字节处。拷贝也会将字符串最后的 '\0' 拷贝到目标地址最后,返回目标destination处的地址。包含在string.h的头文件里

strcat

char * strcat ( char * destination, const char * source );

可以对目标处的字符串进行追加,追加内容为source地址处到下一个 '\0' 处,包含在string.h的头文件里。需要注意:source源字符串必须以 '\0' 结尾,目标空间必须足够容纳源字符串的内容;目标空间必须可修改(不能有常属性:用const修饰之类的)。

strcmp

int strcmp ( const char * str1, const char * str2 );

可以对两个字符串进行比对,包含在string.h的头文件里。比对规则:

标准规定:
        第一个字符串大于第二个字符串,则返回大于0的数字
        第一个字符串等于第二个字符串,则返回0
        第一个字符串小于第二个字符串,则返回小于0的数字

不同编译器下可能对返回值得设定不同。

strncpy

char * strncpy ( char * destination, const char * source, size_t num );

可以对指定的num个字符进行拷贝,包含在string.h的头文件里。需要注意,如果源字符串的长度小于num的话,那么会在目标后面追加0,直到够num个。

strncat

char * strncat ( char * destination, const char * source, size_t num );

可以指定源字符串中的num个字符,将其追加到目标字符串后面,包含在string.h的头文件里。

strncmp

int strncmp ( const char * str1, const char * str2, size_t num );

可以指定str1与str2的num个字符进行比较,返回值的规则同上strcmp,包含在string.h的头文件里。

strstr

char * strstr ( const char * str1, const char * str2 );

返回str2第一次在str1中出现的地址,如果str1中没有出现str2的话,就返回NULL,包含在string.h的头文件里。

strtok

char * strtok ( char * str, const char * sep );

strtok函数,是按照参数sep中的符号将str进行分割返回,包含在string.h的头文件里。

sep:是一个符号集合,里面放着可以作为分割标志将str进行分割的标记,进行一个分割,就会将str中下一个存在sep中的分割标记的地址处改为 '\0' ;

str:被分割的源字符串,如果此参数为空,那就将返回上一个未分割完的字符串再次被标记分割的地址,如果参数为空,上一个字符串也被分割完,那就返回NULL;

返回值:每一个被标记分割的字符串的首地址,如果字符串已被分割完,则返回NULL。

strerror

char * strerror ( int errnum );

会返回错误码所对应的错误信息,包含在error.h的头文件里。

c语言中,有一个error全局变量,如果有错误发生,error就会自动接收错误码。这个时候只要将其用strerror函数转换为错误信息,就可以很好地看到具体发生了什么错误。

字符分类函数:

需要引入ctype.h

iscntrl 任何控制字符

isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'

isdigit 十进制数字 0~9

isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F

islower 小写字母a~z

isupper 大写字母A~Z 

isalpha 字母a~z或A~Z

isalnum 字母或者数字,a~z,A~Z,0~9

ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)

isgraph 任何图形字符

isprint 任何可打印字符,包括图形字符和空白字符

字符转换:

需要引 ctype.h

tolower

int tolower ( int c );

将字符转为小写

toupper

int toupper ( int c );

将字符串转为大写

内存操作函数

前面说了字符串操作函数,就是操作字符串的各种函数,那内存操作函数,就是操作内存中的数据的一些函数了,这些函数可以不用管操作的对象类型,不管是字符,还是整数,还是浮点数,都可以对其就行拷贝,对比,移动等的操作。

memcpy

void * memcpy ( void * destination, const void * source, size_t num );

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置(注意:是一个字节一个字节进行操作的)。这个函数在遇到'\0'的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的,返回目标空间的首地址。

在一些老的编译器中,对memcpy并没有进行优化,如果source和destination有重叠,那么执行结果就会出现定以后的数据在重复拷贝的情况。

memmove

void * memmove ( void * destination, const void * source, size_t num );

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠,就得使用memmove函数处理。

memcmp

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

比较从ptr1和ptr2指针开始的num个字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟婆的cappucino

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值