我是想试试这个拷贝函数的,是想将ptr1的十个数据拷贝到ptr指向空间上的,但是不知道为啥会输出这样的结果。不知道是哪里没有注意到,希望得到帮助。
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#define N 10
int main()
{
//memet对申请的空间进行字节初始化
int *ptr = NULL;
int *ptr1 = NULL;
int i ;
ptr1 = (int *)malloc(N*sizeof(int));
ptr = (int *)malloc(20 *sizeof(int));
if(ptr == NULL|ptr1 ==NULL)
{
printf("Space application failed");
exit(1);
}
memset(ptr,0,20*sizeof(int));//全部初始化为0,按照二进制初始化了
// printf("please enter anumber for ptr\n");
// for(i =0;i<N;i++)
// {
// scanf("%d",(ptr+i));
// }
printf("please enter a number for ptr1:\n");
for(i = 0;i<N;i++)
{
scanf("%d",(ptr1+i));
}
// for(i=0;i<N;i++)
// {
// printf("%d,",*(ptr1+i));
// }
memcpy(ptr,ptr1,10);//可以进行一个数据的拷贝,参数一拷贝目标,参数二拷贝源,参数三拷贝数据个数
for(i=0;i<N;i++)
{
printf("%d",ptr[i]);
}
putchar('\n');
free(ptr);
system("pause");
return 0;
}
void *memcpy( void *dest, const void *src, size_t count );
该函数的第三个参数是字节数,不是元素个数。
memcpy(ptr,ptr1,10);//可以进行一个数据的拷贝,参数一拷贝目标,参数二拷贝源,参数三拷贝数据个数
这一处出错 写成数据个数10 是不对的 要写成被复制的字节数
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
其中:
str1 指向用于存储复制内容的目标数组,类型强制转换为 void * 指针。
str2 指向要复制的数据源,类型强制转换为 void * 指针。
n 为要被复制的字节数。
望采纳!!
第三十九行改为:
memcpy(ptr,ptr1,N*sizeof(int));