C 标准库 - <stddef.h> 学习笔记
简介
<stddef.h>
是 C 标准库的头文件之一,提供了一些通用的类型、宏和函数定义。在编写可移植的 C 代码时,这个头文件非常有用。
数据类型定义
以下是 stddef.h
中定义的数据类型:
size_t
:无符号整数类型,用于表示内存块的大小、数组的下标和字符串长度等非负整数值。ptrdiff_t
:有符号整数类型,用于表示两个指针之间的距离。
常量定义
以下是 stddef.h
中定义的常量:
NULL
:表示空指针的常量,通常定义为((void *)0)
。offsetof(type, member)
:用于计算结构体中成员的偏移量(即该成员相对于结构体起始地址的字节偏移量)。
函数定义
以下是 stddef.h
中定义的函数:
memset(void *s, int c, size_t n)
:将一段内存块的前 n 个字节设置为指定的值 c。memcpy(void *dest, const void *src, size_t n)
:将一段内存块的前 n 个字节从源地址复制到目标地址。memmove(void *dest, const void *src, size_t n)
:与memcpy
类似,但源地址和目标地址可以重叠,可用于移动内存块。memcmp(const void *s1, const void *s2, size_t n)
:比较两个内存块的前 n 个字节,返回它们的大小关系。memchr(const void *s, int c, size_t n)
:在一段内存块中查找指定字符 c,返回第一次出现 c 的位置。strlen(const char *s)
:计算字符串 s 的长度,不包括结尾的空字符。strchr(const char *s, int c)
:在字符串 s 中查找字符 c,返回第一次出现 c 的位置。strrchr(const char *s, int c)
:与strchr
类似,但从字符串末尾开始查找。strcmp(const char *s1, const char *s2)
:比较两个字符串,返回它们的大小关系。strncmp(const char *s1, const char *s2, size_t n)
:与strcmp
类似,但最多比较前 n 个字符。strcpy(char *dest, const char *src)
:将字符串 src 复制到 dest。strncpy(char *dest, const char *src, size_t n)
:与strcpy
类似,但最多复制前 n 个字符。
示例
以下是使用 stddef.h
中定义的函数处理字符串的示例代码:
cCopy Code#include <stddef.h>
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
// 比较两个字符串
if (strcmp(str1, str2) < 0) {
printf("%s is less than %s\n", str1, str2);
} else {
printf("%s is greater than or equal to %s\n", str1, str2);
}
// 查找字符串中的字符
char *ptr = strchr(str1, 'l');
if (ptr != NULL) {
printf("Found 'l' at index %td in %s\n", ptr - str1, str1);
} else {
printf("Did not find 'l' in %s\n", str1);
}
// 复制字符串
char buffer[10];
strncpy(buffer, str1, sizeof(buffer)-1);
buffer[sizeof(buffer)-1] = '\0';
printf("Copied %s to buffer: %s\n", str1, buffer);
return 0;
}
输出结果:
Copy CodeHello is greater than or equal to World
Found 'l' at index 2 in Hello
Copied Hello to buffer: Hello
以上就是 stddef.h
的学习笔记。如果需要更多详细信息,请参考相关文档或 C 语言教程。