Hacker News new | ask | show | jobs
by jasdfwasd 78 days ago
> p = (char*)"";

yikes

1 comments

I thought that was a typo or the forum software removed something, but no - it's a pointer to an empty string literal. If I understand how that works, this creates a null byte (in the read-only memory section of the compiled output?) and points to it. Before this line it checks if p is NULL.

I wonder what is the advantage of doing this? Maybe to make sure that p is an actual pointer, so later code can just make that assumption.

Yeah, it simplifies later code, and is safer in the face of future changes.

Or put another way, it tightens the API/contract of that chunk of code to always return a valid string.

That makes sense, with that "guard" at the top, the rest of the function can return the pointer anywhere. And I imagine the compiler will ensure the empty string literal is created only once. Good to know!
it would be better to make p a const char* though, so that the code is not casting away the constness of the string literal (which can invoke undefined behaviour, though in practice string literals are going to be in a read-only area of memory anyway).