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的数字