當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。