Tho*_*hom 12 c memcpy strncpy string.h
memcpy()和之间有什么重大区别strncpy()?我问这个是因为我们可以轻松地改变strncpy()以复制我们想要的任何类型的数据,而不仅仅是字符,只需将前两个非char*参数转换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]);
}
Run Code Online (Sandbox Code Playgroud)
同样,我们可以使其适用于float其他数据类型.那么有什么重大区别memcpy()呢?
PS:另外,我想知道为什么memcpy()在string.h头文件中,几乎所有的库函数都与字符串有关,而memcpy()在本质上更通用.任何原因?
Tim*_*sch 23
简单的区别是memcpy()可以复制带有嵌入空字符的数据(也就是C样式字符串中的字符串终止符),而strncpy()只会将字符串复制到给定字符数或第一个空字符(和填充符号)的位置的最大值其余的字符串为0).
换句话说,他们确实有两个非常不同的用例.
以数组中的这些数字为例:
brr[2]={512,44};
Run Code Online (Sandbox Code Playgroud)
第一个数字的最低有效字节brr[0]是0(512是0x200),这将导致1) strncpy停止复制.strncpy不复制跟随空字符的字符.
1)为了迂腐(见评论),如果实施有,则保留sizeof (int) > 1.