嵌入式C——常用的一些函数

自己学习过程的一些小总结:

<string.h>头文件

memset函数

头文件:   #include <string.h>
函数原型:void* menset(void *s, int c, unsigned long n)
作用:将某一块内存中(一般是新申请的数组/结构体)的内容进行指定值的初始化。

参数:将指针变量s指向的那块内存的前n个字节的内存单元用一个整型c填充。
在这里插入图片描述
注意:void的字面意思是“无类型”,void* 则为“无类型指针”,void *可以指向任何类型的数据,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。因此,该函数的第一个参数可以直接传参。

memcpy函数

头文件:   #include <string.h>
函数原型:void *memcpy(void *str1, const void *str2, size_t n)
作用:从存储区 str2 复制 n 个字节到存储区 str1

参数:str1 — 指向用于存储复制内容的目标数组,类型强制转换为 void指针。(destination)
           str2 — 指向要复制的数据源(source),类型强制转换为 void
指针。
               n — 要被复制的字节数。

返回值:该函数返回一个指向目标存储区 str1 的指针

bzero函数

头文件:   #include <string.h>
函数原型:void bzero(void *s, int n);
作用:将某内存块的前n个字节清零

参数:参照menset函数,bzero函数无返回值,而memset函数返回一个 “无类型”指针。

strcpy函数

头文件:   #include <string.h>
函数原型:char *strcpy(char *dest, const char *src)
作用:把 src 所指向的字符串复制到 dest(注意dest的数组要足够大,避免造成溢出情况)

参数:dest – 指向用于存储复制内容的目标数组。
             src – 要复制的字符串。

返回值:该函数返回一个指向最终的目标字符串 dest 的指针
注意事项:↓值得注意的是:在应用该函数过程中应该考虑到源指针的字符数组后面是否带有‘\0’
图片所展示是我做面试题所遇到的一个问题,因为str1[10]字符数组中全是字符‘a’,但将其作为strcpy函数的传参,运行中会发生错误,即复制过程系统并不知道何时停止。
因此,值得注意的是:在实际应用中,我们不仅要考虑
1.目标数组是否足够大,避免溢出
2. 源指针的字符数组后面是否带有‘\0’,复制的停止条件是遇到’\0’

strlen函数

头文件:   #include <string.h>
函数原型:unsigned int strlen (char *s)
作用:求字符串的长度(不包括字符串的结束符‘\0’)。判断依据,从字符串的开头位置往后计数,直到遇到‘\0’。(当某自定义字符数组里面没有\0,返回值不确定)

参数:计算指针s所指向的字符数组的长度,返回无符号整型length值

区分:sizeof()是关键字,不是函数,而且计算字符串长度值不会忽略‘\0’。

strcat函数

头文件:   #include <string.h>
函数原型:char *strcat(char *dest, const char *src)
作用:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
          (‘dest’ = “dest + src”)

参数: dest — 指向目标数组,该数组本身存有dest指向的字符串,且足够容纳追加后的字符串。
          src — 指向要追加的字符串,该字符串不会覆盖目标字符串。

返回值:该函数返回一个指向最终的目标字符串 dest 的指针。

strstr函数

头文件:   #include <string.h>
函数原型:char *strstr(char *str1, const char *str2);
作用:用于判断str2字符串是否是str1字符串的子集

参数: str1: 被查找目标
            str2: 要查找对象

返回值:1)找到所匹配的字符串,则该函数返回第一次匹配的字符串的地址;
              2)如果未找到所搜索的字符串,则返回NULL。
在这里插入图片描述

strchr函数

头文件: #include<stdio.h>
函数原型:char *strchr(const char *str, int c)
作用:用于查找str指针所指向的字符串中的一个字符c,并返回该字符在字符串中第一次出现的位置

参数:str :要查找的字符串
              c:要查找的字符(字符的储存形式实质上是整型)

返回值:如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针
              如果未找到该字符则返回 NULL

strcmp函数

头文件: #include<stdio.h>
函数原型:int strcmp(const char *str1, const char *str2)
作用:把 str1 所指向的字符串和 str2 所指向的字符串进行比较(按 ASCII 值大小相比较)。比较结束标志:直到出现不同的字符或遇 ‘\0 ’为止

参数:str1:要进行比较的第一个字符串
str2:要进行比较的第二个字符串

返回值:如果返回值< 0,则表示 str1 <str2。
              如果返回值 == 0,则表示 str1 == str2
              如果返回值> 0,则表示 str1 > str2。

strncmp函数

头文件: #include<stdio.h>
函数原型:int strncmp(const char *str1, const char *str2, size_t n)
作用:把 str1 和 str2 进行比较,最多比较前 n 个字节

参数:str1 – 要进行比较的第一个字符串。
           str2 – 要进行比较的第二个字符串。
           n – 要比较的最大字符数

返回值:如果返回值< 0,则表示 str1 <str2。
              如果返回值 == 0,则表示 str1 == str2
              如果返回值> 0,则表示 str1 > str2。


<stdio.h>头文件

sprintf函数

头文件:    #include<stdio.h>
函数原型:int sprintf( char *buffer, const char *format [, argument,…] );
作用:把一个字符串放在一个已知的字符数组里去,可以让其他数据类型转换成字符串类型

参数:

  1. char *buffer
    接收字符串的字符数组。其大小必须要大于所接收的字符串的大小,否则的话会有空间不够从而导致内存溢出的风险。(这里比较大小时还要考虑到字符串最后的 ‘\0’)
  2. const char *format
    要传的字符串(定义了一个指向字符常量的指针,也就是说,不可以通过这个指针去改变指针所指向的地址的内容)
  3. 剩下参数
    对第二个参数format的补充

返回值:函数如果调用成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

int i;
int len = 100;
float size = 13.14;
char arry[30] = {0};   //注意:ASCII码中0跟‘\0’是一样的
i = sprintf(arry,"len = %d, size = %.2f", len, size);
printf("%s\n", arry);

perror函数

头文件:   #include<stdio.h>
函数原型:void perror(const char *str)

作用:把一个描述性错误消息输出到标准错误 stderr。出错后首先会输出字符串 str,再自动追加一个冒号,然后是一个空格 + 错误信息
在这里插入图片描述
出错运行结果:
在这里插入图片描述

rename函数

头文件:   #include<stdio.h>
函数原型:int rename(const char *old_filename, const char *new_filename)
作用:把 old_filename 所指向的文件名改为 new_filename(必要时记得加路径)

参数:old_filename – 这是 C 字符串,包含了要被重命名/移动的文件名称。
           new_filename – 这是 C 字符串,包含了文件的新名称

返回值:如果成功,则返回零。
              如果错误,则返回 -1,并设置 errno。

remove函数

头文件:   #include<stdio.h>
函数原型:int remove(const char *filename)
作用:删除给定的文件名 filename(必要时记得加路径),以便它不再被访问

参数:filename – 这是 C 字符串,包含了要被删除的文件名

返回值:如果成功,则返回零。
              如果错误,则返回 -1,并设置 errno。

scanf函数、gechar函数、gets函数(标准终端输入)

函数scanf函数getchar函数gets函数
函数原型int scanf(const char *format, …)int getchar(void)char *gets(char *str)
参数format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符无参str – 这是指向一个字符数组的指针,该数组存储了 C 字符串
返回值如果成功,该函数返回成功匹配和赋值的个数;
如果到达文件末尾或发生读错误,则返回 EOF
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF如果成功,该函数返回 str地址。
如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。
区别以 space(空格) enter(回车) tab 作为结束, 且不接收 space, 回车符会残留在缓存区(可能会影响后续的数据读取)当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码(回车字符也会从缓冲区中读出),如出错返回-1以 enter 作为结束, 接收 space(空格), 替换回车符为 ‘\0’(相当于给字符串加结束符), 不会保存回车符在缓存区

fscanf函数、fprintf函数(文件输入输出)

函数名fscanf函数fprintf函数
函数原型int fscanf(FILE *stream, const char *format, …)int fprintf(FILE *stream, const char *format, …)
参数stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流
format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符
与fscanf函数一样
返回值如果成功,该函数返回成功匹配和赋值的个数。
如果到达文件末尾或发生读错误,则返回 EOF
如果成功,则返回写入的字符总数,否则返回一个负数。
作用只能从文本文件中按格式输入。
fscanf函数和scanf函数相似,只是输入的对象是磁盘上文本文件的数据
fscanf(stdin,“%d%d”,&a,&b);
等价于:
scanf(“%d%d”,&a,&b);
因为文件名stdin就是代表终端键盘
fprintf函数和printf函数相似,只是输出的内容将按格式存放在磁盘的文本文件中
语句:
fprintf(stdout,“%d%d”,x,y);
等价于:
printf(“%d%d”,x,y);因为文件名stdout就是代表终端屏幕

fputs函数、fgets函数(文件读写)

函数名fgets函数fputs函数
函数原型char *fgets(char *str, int n, FILE *stream)int fputs(const char *str, FILE *stream)
参数str – 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n – 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
str – 这是一个数组,包含了要写入的以空字符终止的字符序列
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流
返回值如果成功,该函数返回相同的 str 参数。
如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
该函数返回一个非负值,如果发生错误则返回 EOF
作用区别该函数从文件描述符fd指定的文件获得n个字符存入从str开始的n个内存单元中。由于其形参中规定了最大接受字符数,故不会发生像scanf函数那样的缓存溢出的问题(这时候j计算机是从指定文件读出数据)把字符串写入到指定的流 stream 中,但不包括空字符(计算机将数据写入指定的文件)

总览示意图:
在这里插入图片描述


<stdlib.h>头文件

atoi函数

头文件:   #include<stdlib.h>
函数原型:int atoi(const char *str)

作用:把参数 str 所指向的字符串转换为一个整数(类型为 int 型)

参数:str – 要转换为整数的字符串(字符串中只能带数字字符,否则转换失败,返回0)

返回值:该函数返回转换后的长整数
              如果没有执行有效的转换,则返回0

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值