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 Code
Hello is greater than or equal to World Found 'l' at index 2 in Hello Copied Hello to buffer: Hello

以上就是 stddef.h 的学习笔记。如果需要更多详细信息,请参考相关文档或 C 语言教程。