4 ms·
Null terminated string are never meant to use for large buffers. For all small strings that just locally it serves its purpose nicely. C designer realized that
by up2isomorphism 4y ago
Null terminated string are never meant to use for large buffers. For all small strings that just locally it serves its purpose nicely. C designer realized that there is no way to have a standard way to deal with large performance-critical buffers , so they choose not to do it. Which is exactly the reason why C is so powerful - not necessarily fast but never get in your way if you want to.
For array bounds checking, if you want it, just a write a structure with buffer length and a getter setter and it is done. People complain this write zillions of getter setters in other languages but just choose to complain in case for C.
- WalterBright 4y ago> For array bounds checking, if you want it, just a write a structure with buffer length and a getter setter and it is done. It's so easy, yet buffer overflows remain the #1 problem in shipped C code. > For all small strings that just locally it serves its purpose nicely. Not really. Whenever I review other peoples' C code, I look at their use of strlen/strncpy/strxxx functions. They're a rich source of bugs, and I'll usually find one in it (usually an off-by-one error). They don't have to be large strings, either, to be slow.
- up2isomorphism 4y agoIt just means not that many people give a damn about buffer overflows anyway. And put that situation to language’s fault just doesn’t make sense. You are saying C string is slow, I am telling you short local strings are not slow, please tell me why it is slow in that case?