在关于strncpy:http://www.cplusplus.com/reference/clibrary/cstring/strncpy/的以下部分中,它提到了以下内容:
没有空字符被隐式地追加到目的地的末尾,因此只有当源中的C字符串长度小于num时,才会以空终止。
这句话是什么意思?
发布于 2016-12-09 21:41:12
strncpy()的语义,即使在上面的C++引用中进行了精确的解释,也被广泛误解了。该函数的行为违反直觉,容易出错。
为了避免在使用时或在开发过程中进一步出现问题,当维护人员会误读代码并添加更多的子代码错误时,有一个简单的解决方案:永远不会使用这个函数。
您可以在布鲁斯·道森的这篇文章中了解有关此问题的更多详细信息。
要回答您的问题:如果源字符串大于作为第三个参数传递的大小(通常对应于目标缓冲区的大小),则函数将将大小字符复制到目标,其中将不存在空字节。然后调用strlen(destination);将调用未定义的行为,因为它将尝试在数组结束后读取,直到找到空终止符为止。正是这种特定的行为使得strncpy如此容易出错。
https://stackoverflow.com/questions/4768271
复制相似问题