#include <stdio.h>
#include <stdlib.h>
#include <cstring>
int main()
{
int size = 5 ;
int* c = (int*)calloc(size,sizeof(int));
memset(c,0,size*sizeof(int)); // when I input 1 or another value it doesn't work
for (int i=0; i<size;i ){
printf("values %d\n", c[i]);
}
free(c);
}
該程式的輸出如下;
value 0
value 0
value 0
value 0
value 0
但是,如果我將 0 值更改為 1:
value 16843009
value 16843009
value 16843009
value 16843009
value 16843009
我使用 calloc 分離了記憶體。我想為這個使用 memset 函式分配的記憶體地址分配一個值。當我在這里給值 0 時,分配成功完成。我正在顯示一個隨機值,而不是我在這個值之外給出的值。如何使用 memset 函式成功執行此分配?
uj5u.com熱心網友回復:
該memset函式將給定記憶體段中的每個位元組設定為給定值。因此,您不是將 each 設定int為 1,而是將 each 中的每個位元組設定int為 1。
十六進制的十進制數 16843009 是 0x01010101,這說明這正是發生的情況。
如果要將每個設定int為非零值,則需要回圈執行。
uj5u.com熱心網友回復:
memset對位元組進行操作。它將每個位元組設定為1而不是每個 4-byte int。當您將結果解釋為ints 時,您會得到0x01010101十六進制,即16843009十進制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532234.html
標籤:C卡洛克内存集
上一篇:如何在用戶輸入中丟棄除az&&AZ&&0-9以外的所有字符以查找可能的回文
下一篇:C在結構內動態存盤字串的位置
