本篇 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,如下範例,1
2
3
4
5
6
7
8
9
10// g++ cpp-memset.cpp -o a.out
int main() {
char arr[10];
memset(arr, 0, sizeof(arr));
printf("%s\n", arr);
return 0;
}
memset 一般用來初始化字串全部設成 \0
字元或者 0,可以順便看看 memset 其他種用法,其它用法如下,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
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,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
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
665793
-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 用法與範例