C 库函数 - memset()
描述
C 库函数 void *memset(void *str, int c, size_t n) 用于将一段内存区域设置为指定的值。
memset() 函数将指定的值 c 复制到 str 所指向的内存区域的前 n 个字节中,这可以用于将内存块清零或设置为特定值。
在一些情况下,需要快速初始化大块内存为零或者特定值,memset() 可以提供高效的实现。
在清空内存区域或者为内存区域赋值时,memset() 是一个常用的工具函数。
声明
void *memset(void *ptr, int value, size_t num);下面是 memset() 函数的声明。
void *memset(void *str, int c, size_t n)
参数
- str -- 指向要填充的内存区域的指针。
- c -- 要设置的值,通常是一个无符号字符。
- n -- 要被设置为该值的字节数。
返回值
该值返回一个指向存储区 str 的指针。
注意事项
memset()
并不对指针ptr
指向的内存区域做边界检查,因此使用时需要确保ptr
指向的内存区域足够大,避免发生越界访问。memset()
的第二个参数value
通常是一个int
类型的值,但实际上只使用了该值的低8位。这意味着在范围0
到255
之外的其他值可能会产生未定义的行为。num
参数表示要设置的字节数,通常是通过sizeof()
或其他手段计算得到的。
实例
下面的实例演示了 memset() 函数的用法。
实例
#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
实例
#include <stdio.h>
#include <string.h> // 引入 string.h 头文件以使用 memset
int main() {
char buffer[10];
// 将 buffer 数组的前5个字节设置为字符 'A',并添加字符串终止符
memset(buffer, 'A', 5);
buffer[5] = '\0'; // 确保添加字符串终止符
printf("Buffer after memset: %s\n", buffer);
// 将 buffer 数组清零,使用 '\0' 替代 0
memset(buffer, '\0', sizeof(buffer)); // 使用'\0'确保一致性及可读性
printf("Buffer after memset: %s\n", buffer);
return 0;
}
#include <string.h> // 引入 string.h 头文件以使用 memset
int main() {
char buffer[10];
// 将 buffer 数组的前5个字节设置为字符 'A',并添加字符串终止符
memset(buffer, 'A', 5);
buffer[5] = '\0'; // 确保添加字符串终止符
printf("Buffer after memset: %s\n", buffer);
// 将 buffer 数组清零,使用 '\0' 替代 0
memset(buffer, '\0', sizeof(buffer)); // 使用'\0'确保一致性及可读性
printf("Buffer after memset: %s\n", buffer);
return 0;
}
让我们编译并运行上面的程序,这将产生以下结果:
Buffer after memset: AAAAA Buffer after memset: