C/C++ memset 用法與範例

本篇 ShengYu 介紹 C/C++ memset 用法與範例,memset 是用來對一段記憶體區塊全部設定為某個值的函式,以下介紹如何使用 memset 函式。

C/C++ 使用 memset 來對一段記憶體區塊全部設定為某個值,通常設為 0,要使用 memset 的話需要引入的標頭檔 <string.h>,如果要使用 C++ 的標頭檔則是引入 <cstring>
memset 函式原型為

1
void * memset(void * ptr, int value, size_t num);

ptr:指向要設定的記憶體區塊的指標。
value:要設定的值,通常是一個 int 整數,但它會被轉換成 unsigned char 類型來填充記憶體區塊。
num:要設定的 byte 數。

memset() 將 ptr 指向的記憶體區塊全部設定成 value,num 為設定的數量,來看看下面的 memset 用法範例吧!

memset 最基本的用法就是設定成 0,如下範例,

cpp-memset.cpp
1
2
3
4
5
6
7
8
9
10
// g++ cpp-memset.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char arr[10];
memset(arr, 0, sizeof(arr));
printf("%s\n", arr);
return 0;
}

memset 一般用來初始化字串全部設成 \0 字元或者 0,可以順便看看 memset 其他種用法,其它用法如下,

cpp-memset2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// g++ cpp-memset2.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char str1[32] = "hello world";
memset(str1, '\0', 32); // or memset(str1, 0, 32);
printf("%s\n", str1);

printf("---\n");

char str2[] = "hello world";
memset(str2, 'a', 3);
printf("%s\n", str2);

printf("---\n");

char str3[] = "hello world";
memset(str3+5, 0, 6);
printf("%s\n", str3);
return 0;
}

結果如下,

1
2
3
4
5

---
aaalo world
---
hello

錯誤的 memset 用法

對字元陣列初始化使用 memset 是很常見的用法,但如果換成對整數陣列的話呢?
使用 memset 來對 int 整數陣列初始化是無效的,因為 memset 的單位是 byte,整數陣列要使用迴圈迭代來初始化數值,

假設我們想要將 num 整數陣列都初始化為 1 的話,正確用法應該是迴圈迭代 num 陣列來初始化數值,而不是使用 memset,

cpp-memset3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// g++ cpp-memset3.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
int num[3];
memset(num, 1, 3); // 錯誤的用法
for (int i = 0; i < 3; i++) {
printf("%d\n", num[i]);
}

for (int i = 0; i < 3; i++) {
num[i] = 1;
}

for (int i = 0; i < 3; i++) {
printf("%d\n", num[i]);
}

return 0;
}

結果如下,

1
2
3
4
5
6
65793
-376670744
32766
1
1
1

以上就是 C/C++ memset 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
memset - C++ Reference
https://www.cplusplus.com/reference/cstring/memset/

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ memcpy 用法與範例
C/C++ memcmp 用法與範例