<string.h> 是 C 语言标准库中的一个重要头文件,它提供了处理 C 字符串的多种功能。本章将详细介绍 <string.h> 中的主要函数及其使用方法。
字符串长度
strlen
strlen 函数用于计算字符串的长度,不包括终止的空字符 \0。
函数原型
size_t strlen(const char *str);
参数
str:指向要计算长度的 C 字符串的指针。
返回值
返回字符串的实际长度,不包括 \0。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello, World!";
size_t length = strlen(str);
printf("The length of the string is: %zu\n", length);
return 0;
}输出结果
The length of the string is: 13
字符串拷贝
strcpy
strcpy 函数用于将一个字符串复制到另一个位置。目标缓冲区必须足够大,以容纳源字符串及其终止符 \0。
函数原型
char *strcpy(char *dest, const char *src);
参数
dest:目标字符串缓冲区的地址。src:源字符串的地址。
返回值
返回指向目标缓冲区 dest 的指针。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
char dest[50];
const char *src = "Hello, World!";
strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}输出结果
Copied string: Hello, World!
strncpy
strncpy 函数用于将一个字符串复制到另一个位置,但允许指定复制的最大字符数。
函数原型
char *strncpy(char *dest, const char *src, size_t n);
参数
dest:目标字符串缓冲区的地址。src:源字符串的地址。n:最大复制字符数。
返回值
返回指向目标缓冲区 dest 的指针。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
char dest[50];
const char *src = "Hello, World!";
strncpy(dest, src, 5); // 只复制前五个字符
dest[5] = '\0'; // 确保字符串以 \0 结尾
printf("Copied string: %s\n", dest);
return 0;
}输出结果
Copied string: Hello
字符串拼接
strcat
strcat 函数用于将一个字符串追加到另一个字符串的末尾。
函数原型
char *strcat(char *dest, const char *src);
参数
dest:目标字符串缓冲区的地址。src:源字符串的地址。
返回值
返回指向目标缓冲区 dest 的指针。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = "Hello, ";
const char *src = "World!";
strcat(dest, src);
printf("Concatenated string: %s\n", dest);
return 0;
}输出结果
Concatenated string: Hello, World!
strncat
strncat 函数用于将一个字符串的部分内容追加到另一个字符串的末尾,但允许指定追加的最大字符数。
函数原型
char *strncat(char *dest, const char *src, size_t n);
参数
dest:目标字符串缓冲区的地址。src:源字符串的地址。n:最大追加字符数。
返回值
返回指向目标缓冲区 dest 的指针。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = "Hello, ";
const char *src = "World!";
strncat(dest, src, 3); // 只追加前三个字符
printf("Concatenated string: %s\n", dest);
return 0;
}输出结果
Concatenated string: Hello, Worl
字符串比较
strcmp
strcmp 函数用于比较两个字符串。根据比较结果,返回值可能为负数、零或正数。
函数原型
int strcmp(const char *str1, const char *str2);
参数
str1:第一个字符串的地址。str2:第二个字符串的地址。
返回值
- 如果
str1小于str2,返回负数。 - 如果
str1等于str2,返回零。 - 如果
str1大于str2,返回正数。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
const char *str1 = "apple";
const char *str2 = "banana";
int result = strcmp(str1, str2);
if (result < 0) {
printf("%s is less than %s\n", str1, str2);
} else if (result == 0) {
printf("%s is equal to %s\n", str1, str2);
} else {
printf("%s is greater than %s\n", str1, str2);
}
return 0;
}输出结果
apple is less than banana
strncmp
strncmp 函数用于比较两个字符串的一部分内容,但允许指定比较的最大字符数。
函数原型
int strncmp(const char *str1, const char *str2, size_t n);
参数
str1:第一个字符串的地址。str2:第二个字符串的地址。n:最大比较字符数。
返回值
- 如果
str1小于str2,返回负数。 - 如果
str1等于str2,返回零。 - 如果
str1大于str2,返回正数。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
const char *str1 = "apple";
const char *str2 = "appetizer";
int result = strncmp(str1, str2, 3);
if (result < 0) {
printf("%s is less than %s\n", str1, str2);
} else if (result == 0) {
printf("%s is equal to %s\n", str1, str2);
} else {
printf("%s is greater than %s\n", str1, str2);
}
return 0;
}输出结果
apple is equal to appetizer
字符串查找
strstr
strstr 函数用于在一个字符串中查找另一个子字符串首次出现的位置。
函数原型
char *strstr(const char *haystack, const char *needle);
参数
haystack:主字符串的地址。needle:要查找的子字符串的地址。
返回值
- 如果找到子字符串,返回指向子字符串首次出现位置的指针。
- 如果未找到,返回
NULL。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
const char *haystack = "Hello, World!";
const char *needle = "World";
char *result = strstr(haystack, needle);
if (result != NULL) {
printf("Substring found at position: %ld\n", result - haystack);
} else {
printf("Substring not found.\n");
}
return 0;
}输出结果
Substring found at position: 7
strchr
strchr 函数用于在一个字符串中查找一个特定字符首次出现的位置。
函数原型
char *strchr(const char *str, int c);
参数
str:要搜索的字符串的地址。c:要查找的字符。
返回值
- 如果找到字符,返回指向该字符首次出现位置的指针。
- 如果未找到,返回
NULL。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello, World!";
char *result = strchr(str, 'W');
if (result != NULL) {
printf("Character found at position: %ld\n", result - str);
} else {
printf("Character not found.\n");
}
return 0;
}输出结果
Character found at position: 7
字符串转换
strtol
strtol 函数用于将字符串转换为长整型数值。
函数原型
long int strtol(const char *str, char **endptr, int base);
参数
str:要转换的字符串的地址。endptr:指向字符串中未被转换部分的第一个字符的指针。base:数字基数,通常为 10 或 16。
返回值
返回转换后的长整型数值。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *str = "12345";
char *endptr;
long int num = strtol(str, &endptr, 10);
if (*endptr == '\0') {
printf("Converted number: %ld\n", num);
} else {
printf("Invalid input.\n");
}
return 0;
}输出结果
Converted number: 12345
strtoul
strtoul 函数用于将字符串转换为无符号长整型数值。
函数原型
unsigned long int strtoul(const char *str, char **endptr, int base);
参数
str:要转换的字符串的地址。endptr:指向字符串中未被转换部分的第一个字符的指针。base:数字基数,通常为 10 或 16。
返回值
返回转换后的无符号长整型数值。
示例代码
// www.javascriptcn.com code example
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *str = "12345";
char *endptr;
unsigned long int num = strtoul(str, &endptr, 10);
if (*endptr == '\0') {
printf("Converted number: %lu\n", num);
} else {
printf("Invalid input.\n");
}
return 0;
}输出结果
Converted number: 12345
以上是 <string.h> 库函数的详细说明和示例代码。通过这些函数,你可以更高效地进行字符串处理操作。