基本字符函数
- strlen函数
- strcpy函数
- strcat函数
- strcmp函数
- strncpy函数
- strncat函数
- strncmp函数
- strstr函数
- strtok函数
- strerror函数
- memcpy函数
- memmove函数
- memcmp函数
strlen函数:
size_t strlen (const char* str);
函数作用:计算字符串的长度;
注意:
- 字符串以 '\0' 作为结束标志,strlen只返回 '\0'之前的字符数量;
- 函数的返回值是size_t,是无符号的;
strcpy函数
char* strcpy (char* destination , const char* source);
函数作用:将源字符串复制到目标指向的数组中,包括终止符;
注意:
- 源字符串以 '\0' 结尾;
- 目标空间destination必须足够大且可修改;
strcat函数
char* strcat (char* destination,const char* source);
函数作用:将源字符串source追加到destination,souce内容不改变;
注意:
- 源字符串以 '\0' 结尾;
- 目标空间必须足够大且可修改;
stacmp函数
int strcmp (const char* str1,const char* str2);
函数作用:注意比较比较字符串str1和字符串str2的内容,如果完全相同返回1,否则返回0;
注意:
- 第一个字符串大于第二个字符串,则返回大于0的数字;
- 第一个字符串等于第二个字符串,则返回0;
- 第一个字符串小于第二个字符串,则返回小于0的数字;
strncpy函数
char* strncpy (char* destination , const char* source , size_t num);
函数作用:将source字符串的前num个字符拷贝到destination,若source没有num个字符,则会将用0补充到num个;
注意:
- 如果destination有内容,则可能会覆盖;
- 补充的0在打印时不会显示;
- 目标空间必须足够大;
strncat函数
char* strncat (char* destination ,const char* source , size_t num);
函数作用:将source字符串的前num个字符追加到destination中;若source没有num个字符,则用 '\0' 追加;
注意:
- 目标空间destination必须足够大;
strncmp函数
int strncmp (const char* str1 , const char* str2 , size_t num);
参考strcmp函数;
strstr函数
char* strstr ( const char* str1 , const char* str2 );
函数作用:在str1找str2第一次出现的位置,并返回第一次出现的指针;如果str1中没有str2则返回NULL指针。
strtok函数
char* strtok ( char* str , const char* sep);
函数作用: 将str字符串以sep字符串进行分割;
注意:
- sep是一个 “符号” 字符串,这里面的符号用来分割str字符串的;
- strtok函数根据sep中的字符,找到该字符在str字符串中出现的位置并将其换成 '\0' ;
- strtok函数第一个参数不为NULL时,函数将找到str中的第一个标记,strtok函数并保存它在字符串中的位置;
- strtok函数第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始,查找下一个标记;
- 若字符串str不存在sep中的字符,则返回NULL;
如上图,28行中strtok函数的第一个参数不为NULL,strtok函数在ch1中找到第一个标记字符 ' - ' 用 ' \0 ' 替换,并保存该位置;在31行中,strtok函数第一个参数为NULL,strtok将在同一个字符串被保存的位置开始(也就是28行中存储的位置开始),查找下一个标记字符,当sep中的字符找完时,返回NULL。
strerror函数
char* strerror(int errnum);
函数作用:返回代码中的错误;
memcpy函数
void* memcpy (void* destination , const void* source , size_t num);
函数作用:将source字符串向后复制num个字符到destination中;
注意:
- memcpy函数在遇到 "\0" 时不会停止;
- destination和source的空间内存不能有重叠部分;
如上图,
- ch2表示sizeof求得长度,ch3表示strlen的长度;sizeof会将 '\0' 计算在总长度内,而strlen不会将 '\0' 计算在长度内。因此在memcpy时,sizeof的方式自带 '\0' 结尾,而strle就没有 '\0' 作为结尾;因此在打印的时候sizeof打印正确,而strlen打印出现越界;
- 因此在自定义的打印中,memcpy函数不会在新字符串的末尾添加 '\0' ,此时就需要手动添加。
如上图,指定复制位置,将ch1第六个位置开始后的5个字符复制到ch2中,但依然不能忘记手动赋 ' \0 '。
memmove函数
void* memmove(void* destination , const void * source , size_t num);
函数作用:与memcpy类似,但是memmove函数处理内存重叠部分优于memcpy;
如上图,memmove函数依然要将末尾置为 '\0' ,否则会越界;
如上图,memmove函数可以自己追加自己的字符串内容。
memcpy函数
int memcmp(const void* ptr1 , const void* ptr2 , size_t num);
函数作用:比较str1和str2开始的第num个字节,返回值类似strmp。