4 ms·
I never could really understand the point of strncpy()... we always end up wrapping to deal with writing an unterminated string. Was it intended for fixed leng
by rrauenza 6y ago
I never could really understand the point of strncpy()... we always end up wrapping to deal with writing an unterminated string.
Was it intended for fixed length records?
- tedunangst 6y agoIt is for fixed length records, which is why it also zeroes the remaining space.
- ironmagma 6y agoArguably naming it with “str” is itself a security vulnerability.
- tedunangst 6y agoNo argument. At best it is a "string to fixed record" function, hence the name, but it is not a string function.
- Someone 6y agoYes. strncpy was intended for copying file names into a buffer that was only zero terminated when the name was shorter than the maximum length of a file name in Unix (14 bytes. See https://stackoverflow.com/a/1454071 https://stackoverflow.com/a/1454071, https://devblogs.microsoft.com/oldnewthing/20050107-00/?p=36773 https://devblogs.microsoft.com/oldnewthing/20050107-00/?p=36...) You can also use it to overwrite part of an existing string, but I think that’s a side effect of the above.
- deleted 6y ago[deleted]
- spc476 6y agoYes it was. On early Unix systems, each entry in a directory was bascially: struct dir { char name[14]; int inode; }; Adding a NUL byte might waste a full byte that could otherwise be used---remember, back when C was first developed, 10M disks were large and very expensive.