以下均为笔记,草率见谅,首先介绍下在字符串章节所用的函数,再介绍几个常见的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函数

C语言中常见字符串API详解相关推荐

  1. c语言中截取字符串 sub,详解C++ string常用截取字符串方法

    string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos) ...

  2. c语言中的字符串数组,详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #incl ...

  3. JavaScript 面试中常见算法问题详解

    JavaScript 面试中常见算法问题详解,翻译自 https://github.com/kennymkchan/interview-questions-in-javascript.下文提到的很多问 ...

  4. BAT批处理中的字符串处理详解(字符串截取)

    BAT批处理中的字符串处理详解(字符串截取 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字 ...

  5. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  6. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

  7. C语言 中的 数据类型 超详解

    C语言 中的 数据类型 超详解 一.整型(int.short.long.long long) 1.有符号整型 有符号整型的数据类型通常包括 int.short.long.long long 四种,因为 ...

  8. BAT批处理中的字符串处理详解

    参考文章:BAT批处理中的字符串处理详解(字符串截取) 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符.举例说明其基本功能: @ ...

  9. 聚合中返回source_Java 8 中的 Streams API 详解—— Streams 的背景以及 Java 8 中的使用详解...

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

最新文章

  1. KMP----next数组 最长相同前后缀 递归求法解释
  2. Linux(Centos)之安装Redis及注意事项
  3. C# 连接SQL数据库以及操作数据库
  4. 由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
  5. [转] 哈佛大学研究:一个人成为废物的九大根源
  6. gh0st源码分析与远控的编写(四)
  7. 跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用
  8. POI获取WORD信息
  9. 将long型转换为多少MB的方法
  10. dbf文件转excel_Excel批量转PDF,关键一步不能忘
  11. c语言万年历程序及注释,c语言万年历程序.doc
  12. 基于matlab的可见光成像通信OOK解调
  13. HTML文本格式化标签详解
  14. 2021年危险化学品经营单位安全管理人员报名考试及危险化学品经营单位安全管理人员考试资料
  15. Entertain Box multiset的应用
  16. 苹果IOS开发者账号总结
  17. python爬取百度天气接口【实战记录】
  18. 【uniapp】 读取手机通讯录权限
  19. 【Hive】什么是数据仓库?数据仓库和数据库有什么关系?
  20. nbs***bsp;是牛客的bug吗

热门文章

  1. 移动固态硬盘中安装Ubuntu18.04,并且运行于其他电脑
  2. 拼音魔法 使用switch case简化复杂的if else
  3. echarts设置柱状图柱体渐变色
  4. springboot和redis处理页面缓存
  5. python获取当日、本周、本月、昨日、上周、上月时间
  6. Python Day 1
  7. Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘bookService‘
  8. 解决win10开机出现C:\WIndows\system32\config\systemprofile\Desktop不可用 问题
  9. WS_EX_TOOLWINDOW导致的窗口一直不能在前面
  10. RedisTemplate写入Redis数据出现无意义乱码前缀\xac\xed\x00\x05