那些应该用到熟透的C语言函数
本文最后更新于:几秒前
1 字符串相关
1.1 字符串对比
strstr 用于在一个字符串中查找另一个字符串的首次出现位置。
函数原型为:char *strstr(const char *haystack, const char *needle);
这个函数接受两个参数:
haystack:这是你要搜索的字符串。needle:这是你要在haystack中查找的字符串。
如果 needle 在 haystack 中找到,那么 strstr 会返回一个指向 haystack 中 needle 首次出现位置的指针。如果 needle 没有在 haystack 中找到,那么 strstr 会返回 NULL。
例如,在代码中:
1 | |
这行代码试图在 temp_buffer_ptr 指向的字符串中查找 “MC+WAN+WIFI=”。如果找到,temp_ptr0 将指向 “MC+WAN+WIFI=” 在 temp_buffer_ptr 中首次出现的位置。如果没有找到,temp_ptr0 将被设置为 NULL。
跟 strcmp 的区别:
strstr 和 strcmp 都是 C 语言中的字符串处理函数,但它们的功能和用途是不同的。
strstr 函数用于在一个字符串(haystack)中查找另一个字符串(needle)的首次出现位置。如果找到,strstr 返回一个指向 haystack 中 needle 首次出现位置的指针。如果没有找到,strstr 返回 NULL。
例如:
1 | |
而 strcmp 函数用于比较两个字符串。如果两个字符串相等,strcmp 返回 0。如果第一个字符串在字典顺序上小于第二个字符串,strcmp 返回一个负数。如果第一个字符串在字典顺序上大于第二个字符串,strcmp 返回一个正数。
例如:
1 | |
总的来说,strstr 用于查找字符串,而 strcmp 用于比较字符串。
1.2 类型长度
strlen 和 sizeof 的区别
strlen 和 sizeof 是 C 语言中的两个函数,它们都用于获取某种类型的“长度”,但是它们的用途和行为是不同的。
strlen 是一个函数,用于获取 C 字符串(以 ‘\0’ 结尾的字符数组)的长度。strlen 返回的是字符串中的字符数量,不包括结束的空字符 ‘\0’。
例如:
1 | |
sizeof 是一个运算符,用于获取某种类型或对象在内存中占用的字节数。对于数组,sizeof 返回的是整个数组在内存中占用的字节数,而不是数组中的元素数量。
例如:
1 | |
在这个例子中,sizeof(str) 返回的是 6,因为 “Hello” 这个字符串包含 5 个字符,加上结束的空字符 ‘\0’,总共占用 6 个字节的内存。
总的来说,strlen 用于获取字符串的长度,而 sizeof 用于获取类型或对象在内存中的大小。
1.3 格式化字符串输入
对于一长串的 strcpy strcat 可以使用 snprintf 替代。
可以减少代码的复杂性,并且更加安全,因为该函数会检查输出的长度,防止缓冲区溢出。
snprintf 中的 s for string ,n for number ,该函数将会按照指定的格式生成一个字符串,并最多生成指定数量的字符,原型如下:
1 | |
str:这是指向一个字符数组的指针,snprintf将在这个数组中生成格式化的字符串。size:这是str数组的大小。snprintf将最多生成size - 1个字符,然后在字符串的末尾添加一个空字符(\0),以确保生成的字符串是以空字符结束的。format:这是一个格式字符串,它定义了生成的字符串的格式。格式字符串可以包含普通的字符(它们将被直接复制到str中),以及格式指定符(它们以%开头,用于插入snprintf的额外参数的值)。...:这是snprintf的额外参数,它们的值将被插入到str中,取决于format字符串中的格式指定符。
补充:
size_t是一种无符号整数类型,在 c 语言中主要用来表示对象的大小、数组的长度,并且以字节为单位。使用这种类型定义有如下好处:
- 可移植,size_t 的大小会根据平台自动调整
- 防止溢出,无符号可以防止表示负数
- 一致性,c 语言标准库函数都会使用 size_t ,提高可读性
2 结束与换行符
0x0D 和 0x0A 是 ASCII 码的十六进制表示,它们分别对应于十进制的 13 和 10。在 ASCII 表中,0x0D 对应的字符是 CR(Carriage Return,回车,\r),0x0A 对应的字符是 LF(Line Feed,换行,\n)。
所以,0x0D 0x0A 组合在一起,通常用于表示文本中的新行。这种表示方法在 Windows 系统中常见。在 Unix 或 Linux 系统中,通常只使用 0x0A(LF)来表示新行。
而字符串的结束符是 ‘\0’,在 ASCII 中对应的十六进制是 0x00。