C标准库<string.h>-mem开头的函数
void *memchr(const void *str, int c, size_t n)
函数功能
在参数str
所指向的内存区域的前n
个字节中搜索第一次出现字符c
(转换为无符号字符类型)的位置。
参数解释
str
:指向要被搜索的内存区域的指针。c
:要搜索的字符,以整数形式给出,但会被转换为无符号字符类型进行搜索。n
:指定要搜索的字节数。
返回值
如果找到字符c
,则返回指向字符c
在内存区域中第一次出现位置的指针;如果在给定的内存区域中没有找到字符c
,则返回一个空指针。
函数实现
函数用法
一
#include <stdio.h>
#include <string.h>
int main ()
{
const char str[] = "http://www.runoob.com";
const char ch = '.';
char *ret;
ret = (char*)memchr(str, ch, strlen(str));//原函数的返回值类型是“void *”,
//这里我们用强制类型转换将其变成一个“char *”,就可以输出“ch”及其之后的字符了
printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
return(0);
}
|.| 之后的字符串是 - |.runoob.com|
二、
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello,World!";
int c = 'W';
int n = strlen(str);
// 使用 memchr 查找字符 'W'
char *result = (char *) memchr(str, c, n);
if (result) {
// 计算找到的字符在字符串中的位置
int position = result - str+1;
printf("Character '%c' found at position: %d\n", c, position);
} else {
printf("Character '%c' not found.\n", c);
}
return 0;
}
Character 'W' found at position: 7
请按任意键继续. . .
int memcmp(const void *str1, const void *str2, size_t n))
函数功能
用于比较两个内存块(str1,str2),前n个字节的内容
参数解释
- str1 -- 指向内存块的指针。
- str2 -- 指向内存块的指针。
- n -- 要被比较的字节数。
返回值
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str1 大于 str2。
- 如果返回值 = 0,则表示 str1 等于 str2。
函数实现
函数用法
通过“函数实现”我们可以知道这个函数对比两个字符串,当遇到不同的时候就做出判断,如果返回值 < 0,则表示 str1 小于 str2。如果返回值 > 0,则表示 str1 大于 str2。如果返回值 = 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <string.h>
int main() {
const char *str1 = "Hyllo";
const char *str2 = "Horld";
int n = 5; // 比较前5个字符
int result = memcmp(str1, str2, n);
if (result == 0) {
printf("The memory areas are equal.\n");
} else if (result < 0) {
printf("The first memory area is less than the second.\n");
} else {
printf("The first memory area is greater than the second.\n");
}
return 0;
}
The first memory area is greater than the second.
请按任意键继续. . .
void *memcpy(void *str1, const void *str2, size_t n)
函数功能
memcpy
函数用于从源内存地址复制指定数量的字节到目标内存地址。
参数解释
str1
:指向目标内存区域的指针,数据将被复制到这里。str2
:指向源内存区域的指针,数据将从这里复制。n
:要复制的字节数。
返回值
返回指向目标内存区域 str1
的指针。
函数实现
函数用法
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[20]; // 确保有足够的空间来存储复制的数据
// 将 src 复制到 dest
memcpy(dest, src, strlen(src) + 1); // 加1以包括空字符 '\0'
printf("Source: %s\n", src);
printf("Destination: %s\n", dest);
return 0;
}
Source: Hello, World!
Destination: Hello, World!
请按任意键继续. . .
void *memmove(void *str1, const void *str2, size_t n)
函数功能
memmove
函数用于从源内存地址复制指定数量的字节到目标内存地址。与 memcpy
不同的是,memmove
可以处理源和目标内存区域重叠的情况。
参数解释
str1
:指向目标内存区域的指针,数据将被复制到这里。str2
:指向源内存区域的指针,数据将从这里复制。n
:要复制的字节数。
返回值
返回指向目标内存区域 str1
的指针
函数实现
函数用法
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "abcdefghijklmn";
// 将从 str + 2 开始的 5 个字节复制到 str + 7
memmove(str + 7, str + 2, 5);
printf("%s\n", str);
return 0;
}
abcdefgcdefgmn
请按任意键继续. . .
void *memset(void *str, int c, size_t n)
函数功能
memset
函数用于将指定的值填充到内存区域的指定字节数中。这个函数通常用于初始化数组或清空内存区域。
参数解释
- str -- 指向要填充的内存区域的指针。
- c -- 要设置的值,通常是一个无符号字符。
- n -- 要被设置为该值的字节数。
返回值
该值返回一个指向存储区 str 的指针。
函数实现
函数用法
#include <stdio.h>
#include <string.h>
int main ()
{
char str[50];
strcpy(str,"This is string.h library function");
puts(str);
memset(str,'$',7);
puts(str);
return(0);
}
This is string.h library function
$$$$$$$ string.h library function