Tag: memset

C:使用memsetfunction

这是我想要编写的代码: #include #include #include #include #include int main(int argc, char *argv[]) { float arry[3] = {0}; memset(arry, (int) 10.0, 3*sizeof(float)); return 0; } 我的问题是我想看看是否可以使用memset使数组的每个条目都是0以外的数字。但是,在单步执行该行之后,数组内容会变为非常小的数字(0)。 我想知道在这种情况下我使用memset()函数做错了什么。 我希望这不是一个重复的post,因为我输入的所有相关问题似乎都没有。

如果大小为0,可以使用空指针调用memset()吗?

出于这样或那样的原因,我想手动滚动一个归零版本的malloc() 。 为了最大限度地减少算法的复杂性,我想写: void * my_calloc(size_t size) { return memset(malloc(size), 0, size); } 当size == 0时这个定义得很好吗? 调用malloc()的大小为零,但允许它返回空指针。 memset的后续调用是否可以,或者这是未定义的行为,我需要添加条件if (size) ? 我非常想避免多余的条件检查! 假设目前malloc()没有失败。 实际上,那里也会有一个手动推出的malloc()版本,它将在失败时终止。 像这样的东西: void * my_malloc(size_t size) { void * const p = malloc(size); if (p || 0 == size) return p; terminate(); }

是否保证memset会将结构中的填充位清零?

一般来说,根据C标准,保证带有0的memset()会将C结构中的填充位清零吗? 那gcc怎么样? 例如,类似于: struct MyStruct { unsigned char member1; unsigned int member2; char member3; unsigned char member4; float member5; }; struct MyStruct ms; memset(&ms, 0, sizeof( struct MyStruct));

c语言的memset函数

我现在正在研究memset函数,但所有示例都与char数组有关,如下所示: char a[100]; memset(a, 0, 100); 它会将此char数组中的每个元素设置为0。 我想知道memset是否可以应用于int数组或float数组?

在使用malloc分配新内存后,是否必须调用memset

#include “stdlib.h” #include “stdio.h” #include “string.h” int main(int argc, char* argv[]) { int *test = malloc(15 * sizeof(int)); for(int i = 0;i < 15 ;i ++ ) printf("test is %i\n",test[i]); memset(test,0,sizeof(int) * 15); for(int i = 0 ; i < 15; i ++ ) printf("test after memset is %i\n",test[i]); return 0; } 我得到的输出非常奇怪: test is […]

在C中使用memset()有什么好处

我很好奇在类似下面的情况下使用memset()在效率方面是否有任何优势。 鉴于以下缓冲区声明…… struct More_Buffer_Info { unsigned char a[10]; unsigned char b[10]; unsigned char c[10]; }; struct My_Buffer_Type { struct More_Buffer_Info buffer_info[100]; }; struct My_Buffer_Type my_buffer[5]; unsigned char *p; p = (unsigned char *)my_buffer; 除了少量代码之外,使用它还有一个优点: memset((void *)p, 0, sizeof(my_buffer)); 在此: for (i = 0; i < sizeof(my_buffer); i++) { *p++ = 0; }

在使用之前将诸如sockaddr_in,sockaddr_in6和addrinfo之类的结构清零时,这是正确的:memset,初始化器还是其中之一?

每当我在书籍,手册页和网站中查看真实代码或示例套接字代码时,我几乎总会看到类似下面的内容: struct sockaddr_in foo; memset(&foo, 0, sizeof foo); /* or bzero(), which POSIX marks as LEGACY, and is not in standard C */ foo.sin_port = htons(42); 代替: struct sockaddr_in foo = { 0 }; /* if at least one member is initialized, all others are set to zero (as though they had static storage duration) […]

在c中使用整数数组的memset

char str[]=”beautiful earth”; memset(str,’*’,6); printf(“%s”,str); output: ******ful earth 1)像上面使用的memset一样,我们只能初始化几个整数数组索引值为1,如下所示? int arr[15]; memset(arr,1,6);