10|标准库:字符、字符串处理与数学计算
该思维导图由 AI 生成,仅供参考
C 语言中的字符和字符串
字符
- 深入了解
- 翻译
- 解释
- 总结
本文主要介绍了C语言中的字符、字符串处理与数学计算相关内容。首先讨论了C标准库的重要性,包括字符、字符串处理和数学运算等多个方面。文章详细介绍了C语言中字符的特性,包括字符类型char的符号性、大小以及ASCII编码的使用,还介绍了C90和C11标准中新增的宽字符类型。此外,文章讨论了字符串在C语言中的定义方式以及在内存中的布局形式,并介绍了C标准库中的字符、字符串处理函数的使用方法,包括统计字符串长度、拼接字符串、拷贝字符串和格式化字符串等。另外,还提到了C标准库头文件ctype.h中包含的字符判断和转换函数。此外,文章还介绍了C标准库中与数学运算相关的函数,包括math.h头文件中包含的精确类型版本和tgmath.h头文件中提供的泛型宏函数版本。最后,文章提到了一些常用的数学运算会被直接映射到对应的机器指令,以获得更高的性能。文章内容深入浅出,为读者提供了深入了解C语言技术特点的入门指南。
《深入 C 语言和程序运行原理》,新⼈⾸单¥59
全部留言(18)
- 最新
- 精选
- ppd0705置顶看了半天也没看懂 tgmath.h 怎么实现泛型的,有大佬帮忙指点一二吗?
作者回复: 可以尝试看看 musl 中的实现:http://git.musl-libc.org/cgit/musl/tree/include/tgmath.h
2022-03-132 - zxk如果把 strncpy 函数中第三个参数使用的 strlen 函数更换成 sizeof,那么程序运行会得到什么结果?为什么? 会得到 14 个连续的 b。这是由于 sizeof 得到的长度为 7,会导致 strA 的终止符被替换成 b,后面再次读取 strA 的时候由于无法识别到终止符,会继续读取,直到读取到 strB 的终止符才结束。两个字符串加起来就是 14 个 b。
作者回复: 回答正确!
2022-02-0156 - Ping老师能不能介绍一下musl这个库的特点和用途?
作者回复: musl 其实跟我们常用的 glibc(GNU C Library)类似,两者同属于 C 标准库(libc)的一种实现。只是相对来说,glibc 实现较为臃肿,健壮性稍差,存在的潜在漏洞也多。但是实现的功能众多(有很多 C 标准以外的),且使用也很广泛。而 musl 则旨在提供一个轻量级的、ABI 稳定的、且适用于移动设备和嵌入式系统的 libc 实现。它支持的功能上则对标 C 标准。
2021-12-293 - 白花风信子学到好多细节!不过老师会在后面再深入提提elf文件是怎么加载的嘛qwq。
作者回复: 会的哈,我们会在下一个模块中介绍的。
2021-12-293 - ppm怎么没有snprintf的例子
作者回复: 嗯,查了一下才发现 snprintf 比 sprintf 函数更安全一些。新知识很到位!
2021-12-291 - serika为什么我 pgrep string | xargs -I {} cat /proc/{}/maps 这条指令打印不出来任何信息呀。 虽然第二条指令可以生效,也可以看见字符串的内容,但是地址却和程序本身打印的不一样。 这是有什么地址保护的机制吗。 我的环境是 ubuntu22 ,gcc 的版本是 11.3.0 。
作者回复: 可以先看看前半部分命令 “pgrep string” 打印的内容是什么。
2022-12-04归属地:湖北 - feipgrep string | xargs -I {} cat /proc/{}/maps 这条命令执行时,string进程老早退出了。这个实验要怎么来做呢?
作者回复: 是在什么系统上测试的?
2022-08-05归属地:浙江2 - 徐雅清为什么我在线编译,isalpha(c)的结果是1024呢,复制的老师的代码
作者回复: 很好的问题!需要注意的是,实际上包括 isalpha 在内的一系列字符判断函数,它们的行为是在满足函数格式要求的情况下返回“非零值”,否则返回 0。而这里的非零值具体是多少则视不同的编译器而定。
2022-06-12 - 龍蝦而使用数组形式定义的字符串 strA ,则是将该字符串的数据从 .rodata 中复制到了其他地方,strA 的值为复制后该字符串第一个字符的所在地址。 老师,数组形式定义,应该是在栈上直接定义局部变量吧? #include <stdio.h> int main(void) { const char strA[] = "a"; const char* strB = "a"; return 0; } .LC0: .string "a" main: push rbp mov rbp, rsp mov WORD PTR [rbp-10], 97 mov QWORD PTR [rbp-8], OFFSET FLAT:.LC0 mov eax, 0 pop rbp ret
作者回复: “数组形式定义,应该是在栈上直接定义局部变量吧?”是的哈。我们这里文中提到的“复制”是指对同样的这段数据,编译器会通过其他的方式使用,并不是说在机器指令层面有复制的过程。
2022-03-02 - shk1230什么叫泛型宏?
作者回复: 这里实际上就是对 tgmath.h 中的这些支持泛型参数的宏函数简称哈。
2022-02-26