memcpy()

使用memcpy()函数出现如下错误:

int main()
{
  int *chunk = (int *)malloc(10*sizeof(int));
  //chunk[5] = 20;
  for(int i = 0;i<10;i++)
  {
   chunk[i] = i;
 }
  memcpy(chunk ,0 , 10*sizeof(int));
  printf("chunk 9 is%d\n",chunk[5]);
  free(chunk);
}

 warning: null argument where non-null required (argument 2) [-Wnonnull]
   memcpy(chunk ,0x00 ,9*sizeof(int));

这句话是个编译警告,意思是说把空自变量(null argument),即0,赋值给了标明属性为非零指针的参数。这个问题是由于参数不匹配引起的

例如memcpy (void *dest, const void *src, size_t len)函数,其第1和第2个参数即为非零指针。如果将0值写入该参数后,就会引起该警告。
解决方法为:
可以将0值赋给一个变量,然后将该变量的指针赋给该参数即可。


int main()
{
  int *chunk = (int *)malloc(10*sizeof(int));
  //chunk[5] = 20;
  for(int i = 0;i<10;i++)
  {
   chunk[i] = i;
 }
  int a = 0;
  memcpy(chunk ,&a , 10*sizeof(int));
  printf("chunk 9 is%d\n",chunk[5]);
  free(chunk);
}

 

你可能感兴趣的:(C语言)