字符操作函数

strlen()求字符串长度

#include <string.h>size_t strlen(const char *str)
  • str :要计算长度的字符串的首地址。
  • size_t :这是unsigned int类型,是无符号的。
  • 留神 :必须读取到 \0 才算完结,然而返回的长度不包含结尾字符 \0。
char arr1[] = "abcd";char arr2[] = {'a','b','c','d'};int a = strlen(arr1);  //a的值为4int c = strlen(arr2);  //c的值无奈确认,因为数组前面没有\0,所以strlen要始终计算到有 \0的中央才完结//所以C的值可能会很大

字符串拷贝

strcpy()

#include <string.h>char *strcpy(char *dest, const char *src)
  • 把 src 所指向的字符串复制到 dest。
  • 该函数返回一个指向最终的指标字符串 dest 的指针(即返回dest的地址)
  • 留神:源字符串 src 必须以 \0 结尾,否则程序会解体
  • 这个函数会将源字符串中的 \0 也拷贝过来。
  • 留神:指标dest空间的值必须可变,能力放下源字符串。
char* arr1 = "abcde";char arr2[] = "qwer";strcpy(arr1,arr2);     //这种用法是谬误的,程序会解体// 因为arr1 是常量字符串,是不可更改的,所以会解体。

strncpy()

char *strncpy(char *dest, const char *src, size_t n)
  • n :指定要从 src 中拷贝的字符个数。
  • 当源字符串 src 中没有 n 个字符时,任然会拷贝 n 个字符(残余的用 '\0' 填充)

字符串追加

strcat()

#include <string.h>char *strcat(char *dest, const char *src)
  • 作用:将src中的字符串追加到 dest 字符串前面。
  • dest :指向指标数组,该数组蕴含了一个 C 字符串,且足够包容追加后的字符串。
  • src :指向要追加的字符串,该字符串不会笼罩指标字符串。
  • 返回值:返回一个指针,指向dest。
  • 这种办法追加字符串,能够追加本人。
  • 留神:

    • 源字符串 src和dest 都必须要有 '\0' 。
    • 追加时,在dest 的 '\0' 处开始追加,直到src的 '\0' 追加完后完结(把 '\0' 也追加过来)
    • dest 空间内的值必须是可变的,不能是常量。

strncat()

char *strncat(char *dest, const char *src, size_t n)
  • n :要追加的最大字符数。

字符串比拟

strcmp()

int strcmp(const char *str1, const char *str2)
  • 作用: 把 str1 所指向的字符串和 str2 所指向的字符串进行比拟(比拟对应字符的ASCII码)
  • 留神:这个不是比拟字符串长度,是比拟对应地位上的字符大小,如果雷同就比拟下一对,直到 '\0' 为止。如果不雷同,则返回比拟后果。
  • 返回值:

    • 返回值小于 0,则示意 str1 小于 str2。
    • 返回值大于 0,则示意 str1 大于 str2。
    • 返回值等于 0,则示意 str1 等于 str2。

strncmp()

int strncmp(const char *str1, const char *str2, size_t n)
  • n :指定要比拟的最大字符数(比拟前 n 个字符)

strstr()检索字符串的地位

#include <string.h>char *strstr(const char *bigChar, const char *litterChar)
  • 函数作用:在大字符串中搜寻小字符串第一次呈现的地位。
  • bigChar : 大字符串。
  • litterChar :小字符串。
  • 返回值 :返回在 bigChar 中第一次呈现 litterChar 字符串的地位,如果未找到则返回 null。

strtok()字符串合成

char *strtok(char *str, const char *delim)
  • 作用 :合成字符串 str 为一组字符串,delim 为分隔符。
  • str :字符串
  • delim :分隔符

    • 分隔符为字符串时,字符串中每个字符都是一个分隔符
    • 这个函数会将 str 字符串中与分隔符雷同的字符,变为 '\0'。
  • 返回值:返回被合成的第一个子字符串,如果没有宰割,则返回一个空指针。
  • 留神:当 str 为NULL时,会从上次标记的地位开始找。
int main(){    char arr[] = "abcde@daef.foce";    char buf[30] = { 0 };    strcpy(buf, arr);    const char* sep = "@.";    printf("%s\n", strtok(buf, sep));  //从buf地址开始找    printf("%s\n", strtok(NULL, sep)); //从上次标记的地位往后开始找    printf("%s\n", strtok(NULL, sep));    return 0;}输入后果:abcdedaeffoce

strerror()依据错误码返回错误信息

#include <string.h>#include <errno.h>char *strerror(int errnum)
  • 作用 :从外部数组中搜寻谬误号 errnum,并返回一个指向谬误音讯字符串的指针。
  • errnum : 谬误号码,个别是errno(程序出错时,编译器会将错误码寄存到errno中)
  • 留神 :strerror 生成的谬误字符串取决于开发平台和编译器。
printf("%s\n",strerror(errno)); //打印错误信息。

perror()打印错误信息

void perror(const char *str)  //间接将错误信息打印进去,而strerror只是找到错误信息地位
  • str : 这是字符串,是一个自定义音讯,将显示在本来的谬误音讯之前。

字符转换函数

tolower()转换为小写字母

int tolower(int c);
  • c :要被转换为小写的字母。
  • 返回值:如果 c 有绝对应的小写字母,则返回 c 的小写字母,否则 c 放弃不变
  • 返回值是一个可被隐式转换为 char 类型的 int 值。

toupper()转换为大写字母

int toupper(int c);

内存操作函数

memcpy()内存拷贝

#include <string.h>void *memcpy(void *str1, const void *str2, size_t n)
  • 函数作用 : 从存储区 str2 复制 n 个字节到存储区 str1。
  • 留神 :这个函数的拷贝是针对内存的,无论内存中的数据是什么类型。

memmove()重叠内存拷贝

void *memmove(void *str1, const void *str2, size_t n)
  • 函数性能:能够实现跟 memcpy 雷同的性能,并且能够进行重叠内存的拷贝。

    • 如果指标区域和源区域有重叠的话,memmove() 可能保障源串在被笼罩之前将重叠区域的字节拷贝到指标区域中,复制后源区域的内容会被更改。
  • 在VS编译器中,memcpy也能实现重叠内存拷贝。

memcmp()内存比拟

int memcmp(const void *str1, const void *str2, size_t n)
  • 函数性能 :把存储区 str1 和存储区 str2 的前 n 个字节进行比拟
  • n : 要比拟的字节数。
  • 返回值 :

    • 返回值 < 0,则示意 str1 小于 str2
    • 返回值 > 0,则示意 str1 大于 str2
    • 返回值 = 0,则示意 str1 等于 str2
  • 留神:这个内存比拟是不会在意是否存在 '\0' 的。

memset()内存填充

void *memset(void *str, int c, size_t n)
  • 函数作用 :将字符串 str 的前 n 个字符全副填充为字符 c(一个字符就是一个字节,所以它是以字节为单位进行填充的)
  • 返回值 :返回一个指向存储区 str 的指针。