教你怎么使用C语言库函数中的的字符函数、字符串函数和内存函数

        在C语言中有很多已经实现好的库函数教大家如何使用字符函数、字符串函数、内存函数,以及他们之前的区别。

目录

        一、字符函数

        1、字符分类函数

        2、字符转化函数

        二、字符串函数

        1、strlen

        2、strcpy

        3、strcat

        4、strcmp

        5、strncpy

        6、strncmp

        7、strstr

        8、strtok

        9、strerror

        三、内存函数

        1、memcpy

        2、memmove

        3、memset

        4、memcmp


        一、字符函数

        1、字符分类函数

        这一类函数是对一个字符进行识别或者转化的函数这类函数的用法都非常相似

函数名如果他的参数符合条件就会返回真 否则返回假
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任何图形字符
isprintf任何可打印字符 包括图形字符和空白字符

使用这些函数都需要包含一个头文件ctype.h,只需要给函数传一个参数即可,例如

int islower ( int c);

islower是能够判断参数c是否是小写字母,如果参数c是一个小写字母就会返回一个非0的整数,如果不是小写字母,则返回0。

        2、字符转化函数

        C语言中有两个字符转化函数

int tolower ( int c );//将大写字母参数c转化为小写字母
int toupper ( int c );//将小写字母参数c转化为大写字母

        二、字符串函数

        这一类的函数在使用时都要包含头文件string.h

        1、strlen

        这个函数是用来统计一个字符串中在'\0'之前的字符的个数(不包括'\0')

size_t strlen ( const char * str );

函数的返回值是一个无符号的整形,当参数指向的字符串中没有'\0'时,返回值则是一个随机值。这个函数和sizeof有很大的不同,首先sizeof是一个操作符,二strlen是一个函数;其次sizeof只计算参数类型的大小,只和参数类型有关,和内容无关,而strlen是计算所指向的字符串中在'\0'之前的字符个数,只和内容有关。

        2、strcpy

        这个函数是将source中的内容拷贝到destination当中

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

在使用这个函数时,要注四点,第一,source必须要以'\0'结尾;第二,在拷贝时,会将source指向的字符串中的'\0'拷贝到目标空间中;第三,目标destination所指向的位置必须可修改并且空间足够大,能够放下source所指向的内容在'0'之前的内容;第四,在拷贝完成后,函数会返回一个指向目标空间起始位置的指针。

        3、strcat

        这个函数是将源字符串追加在目标字符串的末尾

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

这个函数和注意点和strcpy有类似的地方。第一,源字符串必须要以'\0'结尾;第二,目标字符串也必须要以'\0'结尾,不然函数不知道从哪里开始追加;第三,目标位置必须可修改并且目标空间足够大,能够容纳下源字符串的内容;第四,在拷贝完成后,函数会返回一个指向目标空间起始位置的指针。

        4、strcmp

        这个函数是用来比较两个字符串的大小,当石str1大于str2时,返回1,;当str1小于str2时,返回-1,当str1等于str2时返回0

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

这个函数在比较时是对字符串中的字符进行比较,当两个字符串中相同位置的字符大小相同时,会继续向后寻找,直到某个字符串结束或者找到不同的字符时进行比较。

        5、strncpy

        这个函数是将源字符串中前num个字符拷贝到目标字符串的末尾

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

当num小于源字符串的长度时,拷贝完成后会在字符串末尾追加一个'\0';当num大于源字符串的长度时,也只会把字符串中到'\0'位置的内容拷贝到目标字符串的末尾;拷贝完成后,函数会返回一个指向目标字符串起始位置的指针。

        6、strncmp

        这个函数和strcmp非常相似,区别只在于strncmp只会比较最多前num个字符,若在num个字符前比较出大小,则会提前结束,当num个字符都相等时,返回0;

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

        7、strstr

        这个函数是在str1字符串中寻找str2字符串第一次出现的位置

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

str2字符串必须以'\0'结尾,但是在寻找的时候不包含'\0',若str1中多次出现str2,也只会返回第一次出现时的位置;若在str1中没有找到str2则会返回一个空指针。

        8、strtok

        这个函数是将str字符串中的内容用sep所包含的符号进行分割

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

其中sep指向了一个自定义的字符串,其中的内容为我们所希望字符串进行分割的分隔符,在第一次调用strtok函数时需要将我们需要分割的字符串传入第一个参数,此时函数会在第一个字符串中寻找sep所指向的分隔符,找到这个分隔符时,会将这个分隔符改为'\0',同时保存下这个位置,当函数的第一个参数为NULL时,函数将会从被保存的位置开始,查找下一个分隔符,当字符串中没有分隔符时,则返回NULL。

        也就是说我们在使用strtok函数分割一个字符串时,我们只需要在第一个调用函数的时候把字符串的指针赋给函数的第一个参数,再进行下次分割时,只需要传入空指针即可,利用这个特性我们就可以用for循环来使用个函数;

char arr[]= "123.456.1256.5221.561" ;
char* sep = ".";
char* str = NULL;
//当第一次进入for循环时,将变量初始化,给函数的第一个参数赋值arr,将函数的返回值再放入str中
//之后每次再进入循环时,把空指针赋值给函数的第一个参数,再把函数返回值放入str中
//当str不为空时,表示字符串中还存在分隔符,则循序继续执行,当字符串中不存在分隔符时,str为空指针,则结束循环
for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
{
    printf("%s\n", str);
}

        9、strerror

        这个函数是把参数部分错误码对应的错误信息的字符串地址返回来

char * strerror ( int errnum );

在C语言程序启动的时候会有一个全局变量errno来记录程序当前的错误码,只要程序发生的某种错误,errno就会存放相应的错误码,这个时候我们就可以用strerror函数来返回这个错误对应的错误信息字符串的地址。

        三、内存函数

        内存函数是对内存中的数据以字节为单位进行操作的函数

        1、memcpy

        这个函数是从source开始向后num个字节内的数据复制到destination指向的内存空间中

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

这个函数在遇到'\0'时不会停下,同时source和destination有任何的重叠,当两块空间重叠时,数据会发生覆盖,复制的结果是未知的。在拷贝完成后,函数会返回一个指向目标空间起始位置的指针。

        2、memmove

        mommove和momcpy的区别就在于,可以mommove可以用来处理两块空间有重叠的数据

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

        3、memset

        这个函数是讲ptr所指向的位置开始往后num个字节的空间都设置为value

void * memset ( void * ptr, int value, size_t num );

        4、memcmp

        这个函数是比较从ptr1和ptr2所指向的位置开始,往后num个字节的空间内数据的大小,当ptr1的内容大于ptr2时,返回一个大于0的值;当ptr1小于ptr2,返回一个小于0的值,当ptr1向后num个字节的内容与ptr2相同,返回0.

int memcmp ( const void * ptr1, const void * ptr2, size_t num );
  • 19
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值