I am quite anxious about strings in C. Do I need to set the last char \0 or it does it by it self? If I don’t do it manually then when I try to debug code and when I access string1[257] it is not null. I am having problems with freeing allocated memory of an array of strings so I thought it was a reason.
char string1[257], string2[257];
scanf("%s", &string2);
string1[257] = '\0';
strncpy(string1, string2, 257);
string1[257] = '\0'; /* do I need to do that? */
Is it absolutely necessary? No, because when you call
scanf,strcpy(except forstrncpywhere you need to manually put zero if it exceeds the size), it copies the null terminator for you. Is it good to do it anyways? Not really, it doesn’t really help the problem of bufferoverflow since those function will go over the size of the buffer anyways. Then what’s the best way? use c++ withstd::string.By the way, if you access/write to
string1[257], that will be out of bound since you’re accessing/writing 258th element in an array of size 257. (it’s 0-based index)