【发布时间】:2013-05-09 07:54:55
【问题描述】:
memcpy() 和strncpy() 之间的显着区别是什么?我问这个是因为我们可以轻松地更改strncpy() 来复制我们想要的任何类型的数据,而不仅仅是字符,只需将前两个非char* 参数转换为char* 并将第三个参数更改为该非字符类型的大小。在下面的程序中,我成功地用它来复制一个整数数组的一部分到另一个,它和memcpy()一样好。
#include <stdio.h>
#include <string.h>
int main ()
{
int arr[2]={20,30},brr[2]={33,44};
//memcpy(arr,brr,sizeof(int)*1);
strncpy((char*)arr,(char*)brr,sizeof(int)*1);
printf("%d,%d",arr[0],arr[1]);
}
同样,我们可以使它适用于float 或其他数据类型。那么和memcpy()有什么显着区别呢?
PS:另外,我想知道为什么memcpy() 在string.h 头文件中,因为几乎所有的库函数都与字符串相关,而memcpy() 在自然。有什么原因吗?
【问题讨论】:
-
我用谷歌搜索了它,但唯一类似的问题是 stackoverflow.com/questions/4593907/… ,但它没有回答我打算在这里问的问题。
-
memcopy 无条件复制,直到完成所需的字节数。 strncpy 将复制直到它到达一个空值(字符串终止符),或复制
n个字节。因此,您不能在任意二进制数据上使用 strncpy,因为这些数据中自然可以包含空值。 -
很高兴这次我得到了很好的答案,而不是像我之前的问题那样一连串的反对票!!