C++ Memset

17 Mar 2025 | 6 分钟阅读

在 C++ 编程语言中,memset ( ) 是一个用于填充内存块的函数。

  • 最初,它将 'ch' 的值转换为无符号字符。这里的 'ch' 指的是要填充到 memset ( ) 函数中传递的另一个值的字符。
  • 之后,它将字符 'ch' 复制到 st [ ] 指向的对象的第一个 'n' 个字符中的每一个。
  • 这里的 'n' 指的是 memset ( ) 中提到的块的大小,它必须等于或小于 st [ ] 指向的对象的大小。
  • 如果 n 的值大于 st [ ] 指向的对象的大小,它将生成错误,因此是未定义的。
  • 如果有时出现对象不可复制的情况,那么它也会生成错误,并且函数的行为与前一种情况相同,即未定义
  • 在 C++ 编程语言中,memset ( ) 函数存在于 < cstring > 头文件中;如果没有包含此头文件,您将无法访问 memset ( ) 函数。
  • 在这里,不可复制的对象如下:数组、C 兼容结构、标量等等;因此在这种情况下 memset ( ) 函数的行为是未定义的。
  • memset ( ) 函数和 memcpy ( ) 函数的唯一区别是,memset ( ) 函数不仅复制值,而且用其他替代品替换它,例如,如果我们要将某个字符串(如 'cool')的每个字符替换为字母 'f',那么结果将是 'ffff'。但是 memcpy ( ) 函数只将值从一个地方复制到另一个地方,或者将一个内容块从一个特定位置复制到另一个内容块。

memset ( ) 函数的语法

现在,让我们讨论这里使用的术语。

  1. st [ ]: st [ ] 表示需要填充的内存指针。它是对象的指针,字符 'ch' 已被复制到该对象。程序员可以根据自己的需要和工作将名称从 st 更改为其他名称。
  2. ch: 这里的 'ch' 指的是需要填充的字符。它也因程序员的选择而异,他们可以相应地重命名它。它在需要时转换为无符号字符,也转换为 int 格式,但 int 可接受的值只有 0 和 -1。
  3. n: 它表示块的大小,也可以说是指定字符 'ch' 需要复制多少次并转换为 memset ( ) 函数中传递的值的数值。

C++ 中 memset ( ) 函数的优点

  • 提高可读性: C++ 中的 memset ( ) 函数主要用于将整个字符串的每个字符转换为作为输入传递给 memset ( ) 函数的特定 int 值。它是一个单行代码;因此非常短,最终提高了可读性。
  • 减少代码行数: 无需使用不必要的循环来分配和转换字符串中存在的每个字符的值,只将 int 值作为输入传递给此 memset ( ) 函数,并且与冗长的方法相比,可以轻松执行相同的任务。
  • 速度更快: 使用 memset ( ) 函数可以更快地将给定字符串的每个字符转换为通过输入传递的值,可以是 int 类型或其他类型,具体取决于程序员。它的工作速度非常快,而不是应用循环和 while 语句来执行相同的任务。
  • 有助于解决未对齐问题: C++ 中的 memset ( ) 函数有助于程序员摆脱未对齐问题。有时,您会遇到处理器中数据未对齐的问题,这会导致程序出错。在这种情况下,C++ 中的 memset ( ) 和 memcpy ( ) 函数是最终的解决方案。

C++ 中 memset ( ) 的实现

我们已经了解了 C++ 中 memset ( ) 函数的概念及其工作原理,现在让我们通过一个示例更详细地了解它。

示例 1

上述程序的输出

memset in C++

在上面的例子中,我们看到字符串 'JavaTpoint' 的每个字符是如何转换为用户传递的单个字母的。这里的空格也被视为一个字符。

示例 2

上述程序的输出

memset in C++

在上面的例子中,我们看到了字符串 'JavaTpoints' 中的每个字符是如何被转换为用户传递的整数值的。这里的空格也被视为一个字符。这里只考虑整数值 0 和 -1,这意味着字符串中的每个字符只转换为 0 和 -1,而不是使用其他整数值,否则将导致垃圾值,这意味着如果您输入 2,那么字符串中的所有字符都将被垃圾值替换。