c语言——字符串函数

strlen(求字符串长度)

size_t strlen ( const char * str );

 strlen返回字符串的长度,但不包括\n,如果使用操作符sizeof则会算上\n所占的空间。

注:sizeof算的是大小,不是长度,只是char类型大小恰好是一个字节。

strerror(错误信息报告)

库函数调用失败时会产生错误码,而strerror函数可以返回错误码所对应的错误信息,在c语言中,有一个全局错误码errno,库函数调用失败时就会将产生错误码存入errno。 

char * strerror ( int errnum );

注:错误码errno需要头文件<errno.h> 

 但实际上有一个更方便的函数perrno,perrno不需要输入错误码。

#include <stdio.h>

int main()
{
 int* p = (int*)malloc(sizeof(int) * 5);
	if (p == NULL)//p为空指针意味着malloc函数调用失败
       perror("malloc");//此时若是malloc调用失败,这个函数将打印    malloc:错误信息
 return 0;
}

 该函数的双引号中写什么就输出什么,会自动在输出的文字后加上  :错误信息

字符串查找

strstr

该函数会在str1中寻找str2字符串,并返回找到的字符串的起始地址,如果找不到将会返回NULL。

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

 

 如图,strstr函数在str中找到了"cde",并将c的地址返回给p,所以使用p打印字符串时从c开始打印

strtok

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

  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。

 

strcpy(字符串拷贝)

将源字符串拷贝到目标空间中。

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

  • 源字符串必须以 '\0' 结束,’\0‘是停止的标志,会一直找到'\0'才会结束拷贝。
  • 目标空间必须足够大,以确保能存放源字符串,以及目标空间必须可变(不能是常量)。

 

strcat(字符串追加)

在目标字符串’\0‘的位置开始追加一个字符串(会将源字符串的’\0‘一并追加过来)。

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

 

  • 源字符串必须以 '\0' 结束,’\0‘是停止的标志,会一直找到'\0'才会停止追加。
  • 目标空间必须足够大,以确保能存放源字符串,以及目标空间必须可变(不能是常量)。

 

strcmp(字符串比较)

该函数用于对比两个字符串,虽说是对比字符串,实际上是一个一个字符进行对比

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

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字

内存操作函数

与字符串函数不同,内存操作函数不会局限于char类型。

memcpy

任意类型数据的拷贝

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

  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  • 这个函数在遇到 '\0' 的时候并不会停下来。
  • 定义上来说如果source和destination有任何的重叠,复制的结果都是未定义的。(实际上在vs2022中是可以正常进行拷贝的,但一般来说像这样的情况我们会使用memmove函数)

 

memmove

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

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

 

memset

用于设置值,从内存块str开始设置n个字节的c

void *memset(void *str, int c, size_t n)

 

注意:设置是设置每一个字节的值,像int类型如果四个字节都设置成100,读取的可不是一百。

memcmp

该函数用于对比两个数据(任意类型)。

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

 对比从两个指针开始,即ptr1和ptr2开始,对比num个字节。

  • ptr1 > ptr2,则返回大于0的数字
  • ptr1 = ptr2,则返回0
  • ptr1 < ptr2,则返回小于0的数字

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值