Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The necessity to memset with '\0', in a toy example

Tags:

c

memset

I encountered the following example of using memset in tutorialspoint:

#include <stdio.h>
#include <string.h>

int main(){
    char src[40];
    char dest[100];

    memset(dest, '\0', sizeof(dest));
    strcpy(src, "This is tutorialspoint.com");
    strcpy(dest, src);

    printf("Final copied string : %s\n", dest);

    return(0);
}

I don't get why the memset line is used, as the compile and result are the same when that line is commented. I would like to ask is that line necessary? or is it a good practice to do so when doing strcpy()? or it is just one random line.

Thanks!

like image 462
ulyssis2 Avatar asked Feb 07 '23 03:02

ulyssis2


1 Answers

It's not needed in this case, in the sense that it has no effect on the output. It might be needed in some similar cases.

char dest[100];

This defines dest as a local array of 100 chars. Its initial value is garbage. It could have been written as:

char dest[100] = "";

or

char dest[100] = { 0 };

but none of those are necessary because dest is assigned a value before it's used.

strcpy(src, "This is tutorialspoint.com");
strcpy(dest, src);

This copies the string contained in src into the array dest. It copies the 26 characters of "This is tutorialspoint.com" plus 1 additional character, the terminating '\0; that marks the end of the string. The previous contents of the dest array are ignored. (If we were using strcat(), it would matter, because strcat() has to find a '\0' in the destination before it can start copying.)

Without the memset() call, the remaining 73 bytes of dest would be garbage -- but that wouldn't matter, because we never look at anything past the '\0' at dest[26].

If, for some reason, we decided to add something like:

printf("dest[99] = '%c'\n", dest[99]);

to the program, then the memset() would matter. But since the purpose of dest is to hold a string (which is by definition terminated by a '\0' null character), that wouldn't be a sensible thing to do. Perfectly legal, but not sensible.

like image 123
Keith Thompson Avatar answered Feb 16 '23 02:02

Keith Thompson