user707549
user707549

Reputation:

memset function in c language

I am studying the memset function now, but all the examples are regarding to char array as following:

char a[100];
memset(a, 0, 100);

it will set every element in this char array to 0.

I wondered if memset can apply to int array or float array?

Upvotes: 18

Views: 28034

Answers (3)

John Humphreys
John Humphreys

Reputation: 39224

It can be applied to any array. The 100 at the end is the size in bytes, so a integer would be 4 bytes each, so it would be -

int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance

Get it? :)

Upvotes: 1

Sebastian Mach
Sebastian Mach

Reputation: 39089

For static-sized and variable-length arrays, you can just

<arbitrary-type>  foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes


Rule of thumb: Never hardcode [data sizes].

(This does not work if you pass arrays as function arguments: Behaviour of Sizeof in C )

Upvotes: 2

Jason
Jason

Reputation: 32490

Yes, it can apply to any memory buffer, but you must input the correct memory buffer size ... memset treats any memory buffer as a series of bytes, so whether it's char, int, float, double, etc, doesn't really matter. Keep in mind though that it will not set multi-byte types to a specific non-zero value ... for example:

int a[100];
memset(a, 1, sizeof(a));

will not set each member of a to the value 1 ... rather it will set every byte in the memory buffer taken up by a to 1, which means every four-byte int will be set to the value 0x01010101, which is not the same as 0x00000001

Upvotes: 47

Related Questions