嵌入式笔记:C语言标准库大全

嵌入式ARM 2023-08-24 13:02

写出看起来专业的C代码,除了规范的变量/函数命名,还需要熟练使用C语言的标准库。当为了数组拷贝自己编写一个for循环的时候(可以用memcpy),其他读者看到这种代码,肯定会感叹程序员的C语言基础不行(为了优化空间除外)。

在本文中,我们将深入研究C语言标准库的不同部分,包括 ,以及 头文件中包含的函数。我们将介绍这些函数的功能、用途,以及提供的C代码示例,以便更好地理解和利用这些功能。

头文件

是C语言标准库中最重要的头文件之一,提供了输入和输出功能。以下是 中常见的一些函数:

1、printf:将格式化的数据输出到标准输出。
int printf(const char *format, ...);
这个函数允许您以指定的格式将数据输出到控制台。
printf("Hello, %s!\n", "world");
2、scanf:从标准输入中读取格式化的数据。
int scanf(const char *format, ...);
这个函数允许您从键盘等输入设备读取数据,并按照指定格式进行解析。
int age;scanf("%d", &age);

3、fprintf:将格式化的数据输出到文件。

int fprintf(FILE *stream, const char *format, ...);

这个函数与 printf 类似,但将输出定向到文件而不是标准输出。

4、fscanf:从文件中读取格式化的数据。

int fscanf(FILE *stream, const char *format, ...);
这个函数从文件中读取数据,并按照指定格式进行解析。

5、fopen:打开文件以进行读写操作。

FILE *fopen(const char *filename, const char *mode);
这个函数用于打开文件,以便进行读取或写入操作。
FILE *file = fopen("example.txt", "r");
6、fclose:关闭文件。
int fclose(FILE *stream);
这个函数用于关闭已打开的文件。

7、fgets:从文件中读取一行数据。

char *fgets(char *s, int size, FILE *stream);

这个函数从文件中读取一行文本数据。

8、fputs:将字符串写入文件。
int fputs(const char *s, FILE *stream);

这个函数将字符串写入文件。

9、fgetc:从文件中读取一个字符。
int fgetc(FILE *stream);

这个函数用于逐字符读取文件内容。

10、fputc:将一个字符写入文件。
int fputc(int c, FILE *stream);

这个函数将一个字符写入文件。

11、rewind:将文件指针移动到文件的开头。
void rewind(FILE *stream);

这个函数用于将文件指针重新设置到文件的开头。

12、feof:检查文件结束标志。
int feof(FILE *stream);
这个函数用于检查文件是否已经到达了文件末尾。
头文件
是另一个重要的C语言标准库头文件,它包含了一组通用的实用函数,用于内存分配、随机数生成、排序等任务。以下是 中常见的一些函数:
1、malloc:分配动态内存。
void *malloc(size_t size);
这个函数用于在堆上分配一块指定大小的内存。
int *arr = (int *)malloc(5 * sizeof(int));
2、calloc:分配并初始化动态内存。
void *calloc(size_t num_elements, size_t element_size);
这个函数用于分配一块指定大小的内存,并将所有字节初始化为零。
int *arr = (int *)calloc(5, sizeof(int));
3、realloc:重新分配动态内存的大小。
void *realloc(void *ptr, size_t size);
这个函数用于更改已分配内存块的大小。
arr = (int *)realloc(arr, 10 * sizeof(int));
4、free:释放动态分配的内存。
void free(void *ptr);
这个函数用于释放先前分配的内存块。
free(arr);
5、rand:生成伪随机数。
int rand(void);
这个函数用于生成一个伪随机整数。
int random_number = rand();
6、srand:设置随机数生成的种子。
void srand(unsigned int seed);
这个函数用于设置伪随机数生成的种子值。
srand(42);
7、abs:计算整数的绝对值。
int abs(int n);
这个函数用于计算整数的绝对值。
int absolute_value = abs(-5);
8、atoi:将字符串转换为整数。
int atoi(const char *str);
这个函数用于将字符串转换为整数。
int number = atoi("42");
9、atof:将字符串转换为浮点数。
double atof(const char *str);
这个函数用于将字符串转换为浮点数。
double pi = atof("3.14159");
10、exit:终止程序的执行。
void exit(int status);
这个函数用于正常或异常终止程序的执行。
exit(0); // 正常退出

11、system:执行系统命令。

int system(const char *command);
这个函数用于执行操作系统命令。
system("ls -l");
12、qsort:对数组进行快速排序。
void qsort(void *base, size_t num_elements, size_t element_size, int (*compare_function)(const void *, const void *));
这个函数用于对数组进行快速排序。
int compare(const void *a, const void *b) {return (*(int *)a - *(int *)b);}

int arr[] = {5, 2, 9, 1, 5};qsort(arr, 5, sizeof(int), compare);

头文件中的函数

头文件提供了处理字符串的函数,包括字符串复制、连接、比较等操作。以下是 中常见的一些函数:

1、strcpy:将一个字符串复制到另一个字符串。

char *strcpy(char *dest, const char *src);
这个函数用于将一个字符串复制到另一个字符串。
char destination[20];char source[] = "Hello, world!";strcpy(destination, source);

2、strcat:将一个字符串附加到另一个字符串。

char *strcat(char *dest, const char *src);
这个函数用于将一个字符串附加到另一个字符串。
char str1[20] = "Hello, ";char str2[] = "world!";strcat(str1, str2);

3、strlen:计算字符串的长度。

size_t strlen(const char *s);
这个函数用于计算字符串的长度。
char str[] = "Hello";size_t length = strlen(str);
4、strcmp:比较两个字符串。
int strcmp(const char *s1, const char *s2);
这个函数用于比较两个字符串。
char str1[] = "apple";char str2[] = "banana";int result = strcmp(str1, str2);
5、strncmp:比较两个字符串的前 n 个字符。
int strncmp(const char *s1, const char *s2, size_t n);
这个函数用于比较两个字符串的前 n 个字符。
char str1[] = "apple";char str2[] = "appetizer";int result = strncmp(str1, str2, 3);
6、strchr:在字符串中查找指定字符的第一次出现。
char *strchr(const char *s, int c);
这个函数用于在字符串中查找指定字符的第一次出现。
char str[] = "Hello, world!";char *result = strchr(str, 'w');
7、strstr:在字符串中查找指定子字符串的第一次出现。
char *strstr(const char *haystack, const char *needle);
这个函数用于在字符串中查找指定子字符串的第一次出现。
char str[] = "The quick brown fox";char *result = strstr(str, "brown");
8、strtok:将字符串拆分为标记。
char *strtok(char *str, const char *delimiters);
这个函数用于将字符串拆分为标记。
char str[] = "apple,banana,grape";char *token = strtok(str, ",");while (token != NULL) {printf("%s\n", token);token = strtok(NULL, ",");}

小 结

这些函数提供了对字符串、内存块和文件的常见操作,是C语言编程中的重要工具。通过使用这些函数,您可以高效地处理输入输出、内存分配和字符串操作等任务,从而提高效率并简化代码。C语言标准库的强大之处在于其简洁性和灵活性,加上标准库的支持,使其成为许多开发人员的首选编程语言之一。

希望本文能够帮助您更好地理解和利用C语言标准库中的函数,提高您的C编程技能。

END

来源:玩转单片机与嵌入式

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
C语言,环形队列
嵌入式开发,要不要接私活?
世界上最流行的软件,抛弃了Git

→点关注,不迷路←

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论 (0)
  • 真空容器的材料选择取决于其应用场景(如科研、工业、医疗)、真空等级(低真空、高真空、超高真空)以及环境条件(温度、压力、化学腐蚀等)。以下是常见材料及其优缺点分析:1. 不锈钢(如304、316L)优点:耐腐蚀性强:316L含钼,耐酸碱和高温氧化,适合高真空和腐蚀性环境。高强度:机械性能稳定,可承受高压差和外部冲击。低放气率:经电解抛光或镀镍处理后,表面放气率极低,适合超高真空系统(如粒子加速器、半导体镀膜设备)。易加工:可焊接、铸造,适合复杂结构设计。缺点:重量大:大型容器运输和安装成本高。磁
    锦正茂科技 2025-03-29 10:52 44浏览
  • 在智能家居领域,无线门铃正朝着高集成度、低功耗、强抗干扰的方向发展。 WTN6040F 和 WT588F02B 两款语音芯片,凭借其 内置EV1527编解码协议 和 免MCU设计 的独特优势,为无线门铃开发提供了革命性解决方案。本文将深入解析这两款芯片的技术特性、应用场景及落地价值。一、无线门铃市场痛点与芯片方案优势1.1 行业核心痛点系统复杂:传统方案需MCU+射频模块+语音芯片组合,BOM成本高功耗瓶颈:待机电流
    广州唯创电子 2025-03-31 09:06 56浏览
  • 一、真空容器的定义与工作原理真空容器是一种能够创造并保持一定真空度的密闭容器。其工作原理通常涉及抽气系统,该系统能够逐渐抽出容器内部的气体分子,从而降低容器内的气压,形成真空环境。在这个过程中,容器的体积并不会因抽气而改变,但容器内的压力会随着气体的抽出而逐渐降低。二、真空容器并非恒压系统真空容器并非一个恒压系统。恒压系统指的是在外部环境变化时,系统内部压力能够保持相对稳定。然而,在真空容器中,随着气体的不断抽出,内部压力会持续降低,直至达到所需的真空度。因此,真空容器内部的压力是变化的,而非恒
    锦正茂科技 2025-03-29 10:23 122浏览
  • 真空容器内部并非wan全没有压强,而是压强极低,接近于零。真空状态下的压强与容器内外气体的分子数量、温度以及容器本身的性质有关。一、真空与压强的基本概念真空指的是一个空间内不存在物质或物质极少的状态,通常用于描述容器或系统中气体的稀薄程度。压强则是单位面积上所受正压力的大小,常用于描述气体、液体等流体对容器壁的作用力。二、真空状态下的压强特点在真空状态下,容器内部的气体分子数量极少,因此它们对容器壁的作用力也相应减小。这导致真空容器内部的压强远低于大气压强,甚至接近于零。然而,由于技术限制和物理
    锦正茂科技 2025-03-29 10:16 126浏览
  • 本文介绍瑞芯微RK356X系列复用接口配置的方法,基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。复用接口介绍由下图可知,红圈内容当前引脚可配置为SPI0或者PWM0功能。由标准系统固件以及相关系统手册可得,当前接口默认配置为SPI0功能:console:/ # ls dev/spidev0.0dev/spidev0.0再由原理图可知当前GPIO为GPIO0_C3
    Industio_触觉智能 2025-03-28 18:14 111浏览
  • 文/杜杰编辑/cc孙聪颖‍3月11日,美国总统特朗普,将自费8万美元购买的特斯拉Model S,开进了白宫。特朗普此举,绝非偶然随性,而是有着鲜明的主观意图,处处彰显出一种刻意托举的姿态 。特朗普也毫不讳言,希望他的购买能推动特斯拉的发展。作为全球电动车鼻祖,特斯拉曾凭借创新理念与先进技术,开辟电动汽车新时代,引领行业发展潮流。然而当下,这家行业先驱正深陷困境,面临着前所未有的挑战。就连“钢铁侠”马斯克自己都在采访时表示“非常困难”,的确是需要美国总统伸手拉一把了。马斯克踏入白宫的那一刻,特斯拉
    华尔街科技眼 2025-03-28 20:44 169浏览
  • 3月27日,长虹中玖闪光超高剂量率电子射线放射治疗系统(e-Flash)临床试验项目在四川大学华西医院正式启动,标志着该项目正式进入临床试验阶段。这不仅是我国医学技术领域的一项重大突破,更是我国在高端医疗设备研发和应用方面的重要里程碑。e-Flash放射治疗系统适用于哪些病症,治疗周期为多久?会不会产生副作用?治疗费用高不高……随着超高剂量率电子射线放射治疗系统(e-Flash)正式进入临床试验阶段,社会各界对该项目的实施情况尤为关注。对此,中国工程院院士范国滨,以及四川大学华西医院、四川省肿瘤
    华尔街科技眼 2025-03-28 20:26 237浏览
  • 在智能语音交互设备开发中,系统响应速度直接影响用户体验。WT588F系列语音芯片凭借其灵活的架构设计,在响应效率方面表现出色。本文将深入解析该芯片从接收指令到音频输出的全过程,并揭示不同工作模式下的时间性能差异。一、核心处理流程与时序分解1.1 典型指令执行路径指令接收 → 协议解析 → 存储寻址 → 数据读取 → 数模转换 → 音频输出1.2 关键阶段时间分布(典型值)处理阶段PWM模式耗时DAC模式耗时外挂Flash模式耗时指令解析2-3ms2-3ms3-5ms存储寻址1ms1ms5-10m
    广州唯创电子 2025-03-31 09:26 90浏览
  • 本文介绍OpenHarmony5.0 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!鸿蒙北向开发主要侧重于应用层的开发,如APP开发、用户界面设计等,更多地关注用户体验、应用性能优化、上层业务逻辑的实现,需要开发者具备基本的编程知识、对操作系统原理的简单理解,以及一定的UI设计感。由触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,支持开源鸿蒙OpenHarmony3.2至5.0系统,适合鸿蒙开发入门学习。下载与安装开发工具点下面链接下载:
    Industio_触觉智能 2025-03-28 18:16 161浏览
  •        随着智能驾驶向L3级及以上迈进,系统对实时性的要求已逼近极限。例如,自动紧急制动(AEB)需在50毫秒内完成感知、决策到执行的全链路响应,多传感器数据同步误差需小于10微秒。然而,传统基于Linux-RT的方案在混合任务处理中存在天然缺陷——其最大中断延迟高达200微秒,且多任务并发时易引发优先级反转问题。据《2024年智能汽车电子架构白皮书》统计,超60%的车企因实时性不足被迫推迟舱驾一体化项目落地。为旌电子给出的破局之道,是采用R5F(实
    中科领创 2025-03-29 11:55 183浏览
  • Shinco音响拆解 一年一次的面包板社区的拆解活动拉开帷幕了。板友们开始大显身手了,拆解各种闲置的宝贝。把各自的设计原理和拆解的感悟一一向电子爱好者展示。产品使用了什么方案,用了什么芯片,能否有更优的方案等等。不仅让拆解的人员了解和深入探索在其中。还可以让网友们学习电子方面的相关知识。今天我也向各位拆解一个产品--- Shinco音响(如下图)。 当产品连接上电脑的耳机孔和USB孔时,它会发出“开机,音频输入模式”的语音播报,。告诉用户它已经进入音响外放模式。3.5mm耳机扣接收电脑音频信号。
    zhusx123 2025-03-30 15:42 68浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦