C 标准库 - <string.h>
简介
string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。
<string.h>
是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作等。
库变量
下面是头文件 string.h 中定义的变量类型:
序号 | 变量 & 描述 |
---|---|
1 | size_t 这是无符号整数类型,它是 sizeof 关键字的结果。 |
库宏
下面是头文件 string.h 中定义的宏:
序号 | 宏 & 描述 |
---|---|
1 | NULL 这个宏是一个空指针常量的值。 |
库函数
下面是头文件 string.h 中定义的函数:
实例
以下是使用 <string.h>
中一些函数的示例。
复制字符串:
实例
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}
连接字符串:
实例
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[] = ", World!";
strcat(str1, str2);
printf("Concatenated string: %s\n", str1);
return 0;
}
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[] = ", World!";
strcat(str1, str2);
printf("Concatenated string: %s\n", str1);
return 0;
}
比较字符串:
实例
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Strings are equal\n");
} else {
printf("Strings are not equal\n");
}
return 0;
}
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Strings are equal\n");
} else {
printf("Strings are not equal\n");
}
return 0;
}
查找字符在字符串中的第一次出现:
实例
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *ptr = strchr(str, 'o');
if (ptr != NULL) {
printf("First occurrence of 'o' found at position: %ld\n", ptr - str);
} else {
printf("Character not found\n");
}
return 0;
}
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *ptr = strchr(str, 'o');
if (ptr != NULL) {
printf("First occurrence of 'o' found at position: %ld\n", ptr - str);
} else {
printf("Character not found\n");
}
return 0;
}
复制内存块:
实例
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
memcpy(dest, src, strlen(src) + 1);
printf("Copied memory: %s\n", dest);
return 0;
}
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
memcpy(dest, src, strlen(src) + 1);
printf("Copied memory: %s\n", dest);
return 0;
}
注意事项
- 使用字符串函数时,需要确保目标缓冲区有足够的空间来存储结果,以避免缓冲区溢出。
strncpy
和strncat
可以指定要复制或连接的最大字符数,有助于防止缓冲区溢出。strtok
函数不是线程安全的,因为它在内部使用静态变量来保存上下文。如果在多线程环境中使用,需要使用strtok_r
函数。- 使用
memcpy
时,源和目标内存区域不应重叠。如果可能会重叠,应该使用memmove
。
通过理解和使用 <string.h>
提供的函数,可以方便地进行字符串和内存操作,编写更加高效和可靠的 C 程序。