Using fgets() with char* type

user3033077 picture user3033077 · Nov 25, 2013 · Viewed 14.6k times · Source

I have a simple question about using fgets() with char* string.

....
char *temp;
FILE fp=fopen("test.txt", "r");

fgets(temp, 500, fp);
printf("%s", temp);
....

This code didn't work well.

But after I modified char *temp to char temp[100];, the code worked well as I intended.

What is the difference between those two?

When I googled it, some said that memory must be allocated to char * using malloc()...

But I couldn't understand it.

Answer

peterh - Reinstate Monica picture peterh - Reinstate Monica · Nov 25, 2013

char *temp is only a pointer. At begin it doesn't points to anything, possibly it has a random value.

fgets() reads 500 bytes from fp to the memory addresse, where this temp pointer points! So, it can overwrite things, it can make segmentation faults, and only with a very low chance will be work relativale normally.

But char temp[500] is a 500 bytes long array. That means, that the compiler does the allocation on the beginning of your process (or at the calling of your function). Thus this 500 bytes will be a useable 500 bytes, but it has a price: you can't reallocate, resize, free, etc. this.

What the google wants from you, is this:

char *temp = (char*)malloc(500);

And a

free(temp);

after you don't need this any more.