当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 memset()用法及代码示例


memset()用于用特定值填充内存块。
memset()函数的语法如下:

// ptr ==> Starting address of memory to be filled
// x   ==> Value to be filled
// n   ==> Number of bytes to be filled starting 
//         from ptr to be filled
void *memset(void *ptr, int x, size_t n);

注意,ptr是一个空指针,因此我们可以将任何类型的指针传递给该函数。


让我们来看一个简单的C语言示例,以演示如何使用memset()函数:

// C program to demonstrate working of memset() 
#include <stdio.h> 
#include <string.h> 
  
int main() 
{ 
    char str[50] = "GeeksForGeeks is for programming geeks."; 
    printf("\nBefore memset():%s\n", str); 
  
    // Fill 8 characters starting from str[13] with '.' 
    memset(str + 13, '.', 8*sizeof(char)); 
  
    printf("After memset():  %s", str); 
    return 0; 
}

输出:

Before memset():GeeksForGeeks is for programming geeks.
After memset():GeeksForGeeks........programming geeks.

说明:(str + 13)指向字符串“ GeeksForGeeks用于编程极客”的第一个空格(从0开始的索引)。memset()设置字符“。”,从字符串的首个“”开始,到最大8个字符位置。给定的字符串,因此我们得到如上所示的输出。

// C program to demonstrate working of memset() 
#include <stdio.h> 
#include <string.h> 
  
void printArray(int arr[], int n) 
{ 
   for (int i=0; i<n; i++) 
      printf("%d ", arr[i]); 
} 
  
int main() 
{ 
    int n = 10; 
    int arr[n]; 
  
    // Fill whole array with 0. 
    memset(arr, 0, n*sizeof(arr[0])); 
    printf("Array after memset()\n"); 
    printArray(arr, n); 
  
    return 0; 
}

输出:

0 0 0 0 0 0 0 0 0 0


行使:

预测以下程序的输出。

// C program to demonstrate working of memset() 
#include <stdio.h> 
#include <string.h> 
  
void printArray(int arr[], int n) 
{ 
   for (int i=0; i<n; i++) 
      printf("%d ", arr[i]); 
} 
  
int main() 
{ 
    int n = 10; 
    int arr[n]; 
  
    // Fill whole array with 100. 
    memset(arr, 10, n*sizeof(arr[0])); 
    printf("Array after memset()\n"); 
    printArray(arr, n); 
  
    return 0; 
}

请注意,上述代码并未将数组值设置为10,因为memset可以逐个字符地工作,并且整数包含一个以上的字节(或多个字符)。

但是,如果将10替换为-1,则得到-1值。因为在char和int的情况下-1的表示都包含全1。

参考: memset man page (linux)



相关用法


注:本文由纯净天空筛选整理自 memset() in C with examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。