C语言中常见字符串API详解

以下均为笔记,草率见谅,首先介绍下在字符串章节所用的函数,再介绍几个常见的api


  1. malloc 函数原型:void *malloc(size_t size)
    C库函数void *malloc(size_t size)分配所需的内存空间,并返回一个指向他的指针

  2. free C库函数void free(void *ptr)释放之前调用calloc、malloc或者realloc所分配的内存空间
    作用:1释放,防止内存泄漏 2防止悬挂指针(野指针的一种)
    普通的变量、数组是在栈上开辟空间,可以自动回收;而malloc在堆上开辟空间,程序结束才会释放,一般需要free。

  3. realloc 函数原型 void *realloc(void *ptr,size_t szie);
    扩容作用,C库函数void *realloc(void *ptr,size_t szie)尝试重新调用之前调用malloc
    或者calloc所分配的ptr所指向的内存块的大小
    void * realloc(原本的地址,增大的内存);

  4. memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。
    void *memset(void *str, int c, size_t n);
    s指向要填充的内存块。
    c是要被设置的值。
    n是要被设置该值的字符数。
    返回类型是一个指向存储区s的指针。

  5. assert 函数原型 void assert( int expression );
    assert 的作用是现计算表达式expression如果其值为假(即为0),
    那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。
    使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
    在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用

API

  1. 输出字符串:
  • puts();
  • printf(“%s”,p);
  1. 获取字符串:
  • scanf(“&s”,p);
  • gets; 函数原型 char * gets(char *str);内存是否合法
    gets这个函数可以无限读取,容易发生溢出。如果溢出,多出来的字符将被写入堆栈中
    这就覆盖了原先的内容,破坏一个或者多个不相关变量的值
  1. 计算长度:

strlen函数
原型:size_t strlen( const char *string );

char arr[20] = “abcdef”;
int len = strlen(arr);
printf(“%d”, len);

注意:
字符串需要以\0作为结尾,strlen函数返回的是在字符串中\0前面出现的字符个数(不包含\0)
参数指向的字符串必须要以\0作为结束
注意函数的返回值类型是size_t类型
更多参考sizeof和strlen你真的清楚了吗?

  1. 拷贝:
  • strcpy 函数原型char *strcpy(char *dest,comst char *src);
  • strncpy 函数原型 char *strncpy(char *dest,const char *src,int n);
    表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的函数数组中,
    并返回被复制后的的dest
  • memcpy函数原型void *memcpy(void *destin, void *source, unsigned n);作用:函数memcpy从source指向的对象中复制n个字符到destin指向的对象中返回值:函数memcpy返回destin的指针。
  1. 拼接:
  • strcat 函数原型 char *strchar(char *dest,const char * src);把src所指向的字符串
    (包括 ’ \0’)复制到dest所指向的字符串后面(删除dest原来末尾的 ’ \0’),要保证 * dest足够长
    可以容纳被复制进来的 *src,*src中原有的字符不变,返回值指向dest的指针
  1. 比较:
  • strcmp 函数原型 int strcmp(const char*s1,const char *s2);
    若str1 = str2,则返回0;若str1<str2,则返回负数;若str1>str2,则返回正数
  • strncmp 函数原型int strncmp (const char*s1,const char *s2,size_t n);
    功能是把str1和str2比较,最多比较前n个字节,若str1和str2前n个字节相同,返回0;若str1>str2,返回大于0的数
    若str1<str2,返回小于0的数
  1. 查找
  • strchr函数:char * strchr()const char * str, char ch);
    功能:
    找到字符串中的某个字符
    参数:
    str - 要检索的字符串
    ch - 要寻找的字符
    返回值:
    ch首次出现的位置,如果没有找到ch返回NULL
  • strstr函数char *strstr(char *str1, const char *str2);
    功能:
    找到字符串中的子串
    参数:
    str1 - 要检索的字符串
    str2 - 要寻找的子串
    返回值:
    若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL
  1. 分割:
  • 字符串分割strtok函数,char * strtok(char * str, const char * delim);
    功能:
    分解字符串 str 为一组字符串
    参数:
    str - 要分割的字符串
    delim - 分隔符
    返回值:
    从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
  1. 转换大小:
  • 转为大写strupr函数
    char *strupr(char *str);
    参数:str //要转换的字符串
    功能:用于将字符串中字符转换为大写
    返回转换后的小写字符串,也就是str。
  • 转为小写strlwr函数
    char *strlwr(char *str);
    功能等同strupr函数

猜你喜欢

转载自blog.csdn.net/qq_44333320/article/details/125716294
今日推荐