那些应该用到熟透的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。