也谈memset函数的使用

Memset函数很多地方有介绍,多余的就不说了。这里给出msdn上的一段解释:

Sets buffers to a specified character. void *memset( void *dest, int c, size_t count ); wchar_t *wmemset( wchar_t *dest, wchar_t c, size_t count ); Parameters dest Pointer to destination. c Character to set. count Number of characters.

有几个要注意的地方, count是字符的个数,建议把每个单位使用一次sizeof×单位的总数来实现完全的memset

比如:

int a[5][5]; memset(a, 0, 5*5*sizeof(int) ); 或者 memset(a, 0, sizeof(a) );

但是要注意的是:

Memset对连续的空间使用,不连续的空间,或者不能确定是否连续的就不能使用,比如动态的二维数组就会表现出不安全的一面:

int **p = (int **)malloc(n * sizeof(int *)); int i = 0; for(; i < n; i++) { p[i] = (int *) malloc(n * sizeof(int)); }

如果:

memset(p, 0,n*n*sizeof(int) );

就会出问题,因为p是动态的二维数组,空间连续否不能保证。

可以这样:

for(i = 0; i < n; i++) memset(p[i], 0, n * sizeof(int) );

因为每一个p[i]内部是连续的。

还有一些其他的要注意的,比如不能对含有虚指针包括vptrvbptr的类对象使用memset等!

你可能感兴趣的:(c,character)