4 ms·
I don't use null terminated strings. ptr+len struct everywhere. And when I need to call an API, like fopen, I make a temporary copy of that string + the null te
by habibur 4y ago
I don't use null terminated strings. ptr+len struct everywhere. And when I need to call an API, like fopen, I make a temporary copy of that string + the null termination, do my work and then free it.
You can printf non-null terminated strings too. Check printf("%.*s", length, strptr).
- torstenvl 4y ago> You can printf non-null terminated strings too. Check printf("%.s", length, strptr).* I haven't checked yet, but I'm about 90% confident that's UB. Is printf() guaranteed not to read to the end of the string when you give it a length?
- nwellnhof 4y agoYes, it is. From the C11 spec: > Characters from the array are written up to (but not including) the terminating null character. If the precision is specified, no more than that many bytes are written. If the precision is not specified or is greater than the size of the array, the array shall contain a null character.
- torstenvl 4y agoThanks! I guess I didn't realize expressio unius est exclusio alterius applies in the C standard :D
- habibur 4y agoWon't read a single byte beyond the length you give it. And this is a standard practice in libraries for printing pre-determined lengthed string.
- t43562 4y agoA long time ago my solution was ptr+len but I allocated 1 more byte so that if a string had to be given to libc, I could terminate it at that time. No need for a copy then.
- wvenable 4y agoBASIC strings in Windows -- you store the length in the 4 bytes before the pointer to the string and put a null terminator at the end. https://learn.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr https://learn.microsoft.com/en-us/previous-versions/windows/...