赞
踩
在C语言中,<string.h>
头文件是标准库中的一个重要部分,它定义了一系列操作字符串和字符数组的函数。本文将详细介绍<string.h>
头文件中包含的22个函数,并提供每个函数的完整示例代码。
<string.h>
头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。在使用这些函数之前,我们首先来了解一下相关的库变量和宏。
<string.h>
头文件中定义的变量类型如下:
sizeof
关键字的结果。<string.h>
头文件中定义的宏如下:
接下来,我们将逐个介绍这22个函数,并给出每个函数的示例代码。
void *memchr(const void *str, int c, size_t n)
在字符串的前 n 个字节中搜索第一次出现字符 c 的位置。
#include <stdio.h> #include <string.h> int main() { const char str[] = "Hello, world!"; const char ch = 'o'; const size_t n = strlen(str); const char *result = memchr(str, ch, n); if (result != NULL) { printf("'%c' found at position: %ld\n", ch, result - str); } else { printf("'%c' not found in the string.\n", ch); } return 0; }
int memcmp(const void *str1, const void *str2, size_t n)
比较两个内存区域的前 n 个字节。
#include <stdio.h> #include <string.h> int main() { const char str1[] = "abc"; const char str2[] = "abd"; const size_t n = 2; int result = memcmp(str1, str2, n); if (result < 0) { printf("str1 is less than str2\n"); } else if (result > 0) { printf("str1 is greater than str2\n"); } else { printf("str1 is equal to str2\n"); } return 0; }
void *memcpy(void *dest, const void *src, size_t n)
从源地址复制 n 个字节到目标地址。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
memcpy(dest, src, strlen(src) + 1);
printf("Copied string: %s\n", dest);
return 0;
}
void *memmove(void *dest, const void *src, size_t n)
从源地址复制 n 个字节到目标地址,处理重叠的情况。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "memmove can be very useful......";
memmove(str + 20, str + 15, 11);
printf("%s\n", str);
return 0;
}
void *memset(void *str, int c, size_t n)
将字符 c 复制到字符串的前 n 个字符。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
memset(str + 7, '*', 5);
printf("%s\n", str);
return 0;
}
char *strcat(char *dest, const char *src)
将 src 追加到 dest 的末尾。
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
const char src[] = "world!";
strcat(dest, src);
printf("%s\n", dest);
return 0;
}
char *strncat(char *dest, const char *src, size_t n)
将 src 的最多 n 个字符追加到 dest 的末尾。
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
const char src[] = "world!";
strncat(dest, src, 3);
printf("%s\n", dest);
return 0;
}
char *strchr(const char *str, int c)
在字符串中搜索第一次出现字符 c 的位置。
#include <stdio.h> #include <string.h> int main() { const char str[] = "This is a sample string"; const char ch = 's'; const char *result = strchr(str, ch); if (result != NULL) { printf("'%c' found at position: %ld\n", ch, result - str); } else { printf("'%c' not found in the string.\n", ch); } return 0; }
int strcmp(const char *str1, const char *str2)
比较两个字符串。
#include <stdio.h> #include <string.h> int main() { const char str1[] = "abc"; const char str2[] = "abcd"; int result = strcmp(str1, str2); if (result < 0) { printf("str1 is less than str2\n"); } else if (result > 0) { printf("str1 is greater than str2\n"); } else { printf("str1 is equal to str2\n"); } return 0; }
int strncmp(const char *str1, const char *str2, size_t n)
比较两个字符串的前 n 个字符。
#include <stdio.h> #include <string.h> int main() { const char str1[] = "abc"; const char str2[] = "abcd"; int result = strncmp(str1, str2, 3); if (result < 0) { printf("str1 is less than str2\n"); } else if (result > 0 ) { printf("str1 is greater than str2\n"); } else { printf("str1 is equal to str2\n"); } return 0; }
int strcoll(const char *str1, const char *str2)
根据当前区域设置比较两个字符串。
#include <stdio.h> #include <string.h> #include <locale.h> int main() { setlocale(LC_COLLATE, "en_US.utf8"); const char str1[] = "apple"; const char str2[] = "banana"; int result = strcoll(str1, str2); if (result < 0) { printf("str1 is less than str2\n"); } else if (result > 0) { printf("str1 is greater than str2\n"); } else { printf("str1 is equal to str2\n"); } return 0; }
char *strcpy(char *dest, const char *src)
复制一个字符串。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}
char *strncpy(char *dest, const char *src, size_t n)
复制一个字符串的前 n 个字符。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
strncpy(dest, src, 5);
dest[5] = '\0'; // Null-terminate the string
printf("Copied string: %s\n", dest);
return 0;
}
size_t strcspn(const char *str1, const char *str2)
返回字符串 str1 开头连续不含字符串 str2 中的字符的长度。
#include <stdio.h>
#include <string.h>
int main() {
const char str1[] = "1234567890";
const char str2[] = "aeiou";
size_t len = strcspn(str1, str2);
printf("Length until first vowel: %ld\n", len);
return 0;
}
char *strerror(int errnum)
返回错误号 errnum 对应的错误消息字符串。
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
FILE *file;
file = fopen("nonexistentfile.txt", "r");
if (file == NULL) {
perror("Error");
printf("Error message: %s\n", strerror(errno));
}
return 0;
}
size_t strlen(const char *str)
返回字符串的长度,不包括空结束字符。
#include <stdio.h>
#include <string.h>
int main() {
const char str[] = "Hello, world!";
size_t len = strlen(str);
printf("Length of the string: %ld\n", len);
return 0;
}
char *strpbrk(const char *str1, const char *str2)
返回字符串 str1 中第一个匹配字符串 str2 中字符的字符的位置。
#include <stdio.h> #include <string.h> int main() { const char str1[] = "This is a sample string"; const char str2[] = "aeiou"; char *result = strpbrk(str1, str2); if (result != NULL) { printf("First vowel found at: %ld\n", result - str1); } else { printf("No vowels found in the string.\n"); } return 0; }
char *strrchr(const char *str, int c)
返回字符串中最后一次出现字符 c 的位置。
#include <stdio.h> #include <string.h> int main() { const char str[] = "This is a sample string"; const char ch = 's'; const char *result = strrchr(str, ch); if (result != NULL) { printf("'%c' found at position: %ld\n", ch, result - str); } else { printf("'%c' not found in the string.\n", ch); } return 0; }
size_t strspn(const char *str1, const char *str2)
返回字符串 str1 中第一个不在字符串 str2 中出现的字符的下标。
#include <stdio.h>
#include <string.h>
int main() {
const char str1[] = "abcde";
const char str2[] = "aeiou";
size_t len = strspn(str1, str2);
printf("Length of initial segment containing vowels: %ld\n", len);
return 0;
}
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle 的位置。
#include <stdio.h> #include <string.h> int main() { const char haystack[] = "This is a sample string"; const char needle[] = "sample"; char *result = strstr(haystack, needle); if (result != NULL) { printf("'%s' found at position: %ld\n", needle, result - haystack); } else { printf("'%s' not found in the string.\n", needle); } return 0; }
char *strtok(char *str, const char *delim)
分解字符串为一组字符串,使用 delim 作为分隔符。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "This is a sample string";
const char delim[] = " ";
char *token = strtok(str, delim);
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, delim);
}
return 0;
}
size_t strxfrm(char *dest, const char *src, size_t n)
根据当前的区域设置转换字符串 src 的前 n 个字符,并将它们放置在字符串 dest 中。
#include <stdio.h> #include <string.h> #include <locale.h> int main() { setlocale(LC_COLLATE, "en_US.utf8"); const char src[] = "banana"; char dest[20]; size_t len = strxfrm(dest, src, sizeof(dest)); printf("Transformed string: %s\n", dest); return 0; }
通过本文,我们详细介绍了C语言标准库中<string.h>
头文件提供的22个函数,并提供了每个函数的完整示例代码。这些函数在处理字符串和字符数组时非常有用,可以帮助开发人员轻松地进行字符串操作和处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。