strncpy()是memcpy()的特化吗?

iam*_*ind 1 c c++ standard-library

只是好奇地知道(因为我们经常使用这些功能).我没有看到strncpy()memcpy()之间有任何实际区别.有效地说,不值得

char* strncpy (char *dst, const char *src, size_t size)
{
  return (char*)memcpy(dst, src, size);
}
Run Code Online (Sandbox Code Playgroud)

或者我错过任何副作用?有一个类似的早期问题,但找不到确切的答案.

Ale*_*ler 8

有区别,请参阅strncpy您链接到的页面的这一部分(强调我的):

将源的前num个字符复制到目标.如果在复制num个字符之前找到源C字符串的结尾(由空字符表示),则使用零填充目标,直到已向其写入总共num个字符.

因此,如果要复制的字符串短于限制,strncpy则在memcpy读取超出限制时填充零(可能调用未定义的行为).