-2

我目前有两个typedef struct名为“drinks”的二维数组

//Global Variable
int typenum = 0;
int typetotal = 0;
int classtotal = 0; 
/*..skipped other variables... */

typedef struct nodebase{
    char productname[254];
    char companyname[254];
    int productencoding;
    int rownum;
    int colnum;
    int price;
    struct nodebase *next;
}drinks;

/* 跳过了将使用 typenum、typetotal 和 classtotal 的部分 */

void copy_data(drinks a[3][100],drinks b[3][100],int typenum,int typetotal,int classtotal)
{
    memcpy(&b[typenum][classtotal],&a[typenum][typetotal],sizeof(drinks));
}

假设drinks a它的变量中肯定有所有数据typedef struct,我只想将这些数据“复制并粘贴”到drinks b.

但是,使用 VS2012 (Windows) 编译代码后,drinks bNULL. 有什么建议吗?

*Calling: copy_data(a,b,typenum,typetotal,classtotal),假设我已经在我将调用的函数中声明和drinks a初始化drinks bcopy_data

4

2 回答 2

0

不要memcpy()用于此;使用赋值:

void copy_data(drinks a[3][100], drinks b[3][100], int typenum, int typetotal, int classtotal)
{
    b[typenum][classtotal] = a[typenum][typetotal];
}

至于你的编译器在做什么,目前还不清楚。但是如果代码是这样的:

int main(void)
{
    drinks a[3][100];
    drinks b[3][100];

    ...initialize b...
    copy_data(a, b, 1, 10, 20);
    ...check result...

}

没有办法b可以合法地成为函数中的空指针copy_data。如果它为空,那么我写的内容和你写的内容之间存在严重分歧。

于 2013-10-03T15:04:56.570 回答
0

赋值运算符,但要小心结构中包含的指针:

void copy_data(drinks a[3][100],drinks b[3][100],int typenum,int typetotal,int classtotal)
{
    // Direct assignment
    b[typenum][classtotal] = a[typenum][typetotal];

    // This pointer will still be to the old list - probably needs updating?
    b[typenum][classtotal].Next = NULL;
}
于 2013-10-03T15:19:39.423 回答