我有一个如下所示的malloc数组:
int* buf;
buf = (int*)malloc(sizeof(int) * N)
其中N是整数数组中的元素数。我试图将数组中的所有N个元素都设置为特定值,例如4(所以buf = [4、4、4,...,4])。
出于意图和目的,这主要是一个实验,因此我试图仅使用memset,不包含循环。这可能吗?
通过memset,我可以做到:
memset(buf, 4, sizeof(int)*N);
我假设在内存中的数组中的任何地方都放置了4,但这似乎并没有按预期工作。假设N = 20,则输出为:
[1,6,8,4,3,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,0,0,0,0]
这不是我期望的,但我注意到的是它已将第4个元素(确实对应于sizeof(int)* N)设置为4。我认为memset会将其全部设置为4,类似于字符串大小写?
答案 0 :(得分:-1)
这里有两个例子
void memsetint(int *table, const int value, size_t size)
{
while(size--)
{
*table++ = value;
}
}
#define gmemset(table, value, size) _Generic((&table[0]), \
int * : memsetint, \
double * : memsetdouble) (table, value, size)
void memsetdouble(double *table, const double value, size_t size)
{
while(size--)
{
*table++ = value;
}
}
int main()
{
double d[1000];
gmemset(d, 45.34, 1000);
printf("%f\n", d[300]);
return 0;
}
#include <string.h>
void mymemset(void *buff, const void *value, const size_t size, size_t count)
{
unsigned char *b = buff;
while(count--)
{
memcpy(b, value, size);
b += size;
}
}
int main()
{
int x[1000];
int value = 5;
mymemset(x, (int []){10}, sizeof(int), 1000);
mymemset(x, &value, sizeof(int), 1000);
return 0;
}