我有一个要求,我需要将一个空数组作为参数传递给函数。在这个被调用的函数中,我应该将一些数据 memcpy 到传递的数组中。所以我写了一个与我的要求相同的小例子。下面是它的代码:
#include <stdio.h>
#include <stdlib.h>
void printArr(int *a)
{
int i;
int *b=(int*)malloc(sizeof(int)*10);
printf("\n\nEnter 10 lements:\n");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
printf("\nContents of array b:\n");
for(i=0;i<10;i++)
printf("%d\t",b[i]);
printf("\n");
memcpy(a,b,10);
printf("\nContents of array a:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
printf("\n");
}
int main()
{
int a[10];
printArr(a);
return 0;
}
在上面的示例中,我将一个数组从 main 函数发送到 printArr 函数。现在在被调用的函数中,数据将被 memcpy 放入数组中。打印数组内容时,我得到一些垃圾值。编译也给出了如下所示的警告:
$ gcc -o arr array.c
array.c: In function ‘printArr’:
array.c:15:2: warning: incompatible implicit declaration of built-in function ‘memcpy’
上述程序的输出如下图所示:
Enter 10 lements:
0 1 2 3 4 5 6 7 8 9
Contents of array b:
0 1 2 3 4 5 6 7 8 9
Contents of array a:
0 1 134479874 11136160 11136160 11132916 134514160 134513696 134514171 11132916
有人可以告诉我上面的程序有什么问题吗?
注意:由于实际程序中的性能原因,我只需要使用 memcpy 而不是通过 for 循环将数据从缓冲区复制到传递的数组。
提前致谢。