#include<stdio.h>
#include<string.h>
#define print(x){ \
while(*x != -1){ \
printf("\n %d \n",*x); \
x++; \
}
void int_copy(int* ptrA, int* ptrB, int nbr)
{
memcpy(ptrA,ptrB,nbr);
}
int main()
{
int stringa[40] = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, -1};
int stringb[40];
memset(stringb, 0, sizeof(stringb));
int *ptr;
int *ptr1;
int len = 0;
ptr = stringa;
ptr1 = stringb;
while(*ptr != -1)
{
*ptr++;
len++;
}
printf("\n len : %d \n",len);
int_copy(stringa, stringb, len);
print(ptr1)
return 0;
}
我在尝试执行时遇到错误。
答案 0 :(得分:3)
除了其他人向您指出的问题之外,我建议您计算宏中的开合括号数。
#define print(x){ \
while(*x != -1){ \
printf("\n %d \n",*x); \
x++; \
}
答案 1 :(得分:2)
当您致电int_copy
时,len
的值将为0.
此外,int_copy
中的代码已损坏,无法缩放要复制的字符数。
应该是:
void int_copy(int* ptrA, const int* ptrB, int nbr)
{
memcpy(ptrA, ptrB, nbr * sizeof *ptrB);
}
自memcpy()
复制char
以来,您必须按照int
的大小进行扩展。
答案 2 :(得分:1)
你的问题是
void int_copy(int* ptrA,int* ptrB,int nbr){
memcpy(ptrA,ptrB,nbr);
}
您将len
确定为int
中stringa
的数量,并将其作为nbr
传递。但是在memcpy()
中,它被解释为要复制的缓冲区长度,因此,只有stringa
的第一部分被复制到stringb
而不包括'-1'。更改为memcpy(ptrA,ptrB,nbr*sizeof(int))