(C)结构数组和向其移动数据

时间:2013-11-23 05:18:09

标签: c struct malloc memcpy

我希望做到以下几点:

struct def:

struct mystruct {
     char cArr[500];
}

全局:

    struct mystruct **ptr;
    int count = 0;

在main中:

ptr = malloc(20*sizeof(struct test *));
for (int i = 0; i != 20 ; i++) {
    ptr[i] = malloc(sizeof(struct test));
}

在一些被称为20次的函数中:

char burp[500];
//put whatever I want in burp;
ptr[count]->cArr = burp //is this right? Or do I have to memcpy to it, and if so how?
count++;

所以最后我将依次用我想要的字符填充mystruct数组。我尝试用char **做这件事,但没有运气;我现在将它包装在一个结构中,因为它可以帮助我可视化正在发生的事情。

所以我想要一个char [500]的全局数组,每次调用一个函数时,它会将char [500]放入索引(传递给函数或全局)。

感谢任何建议; Ofc我还需要释放数组的每个索引。

谢谢!

编辑:

所以会这样:

memcpy(ptr[count]->cArr, burp, 500);
那么工作呢?

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>

#include <stdlib.h>

struct  mystruct

 {
    char *cArr; 

  // U were trying to assign array using = operator

  // Remember its not like in STL where u can perform deep copy of a vector    

};


 struct mystruct **ptr;


 int count = 0;


 int main()

{   int i;

    ptr = malloc(20*sizeof(struct mystruct *));

    for (i = 0; i != 20 ; i++) 

{
    ptr[i] = malloc(sizeof(struct mystruct));

}

   char burp[500]="No this is not correct boy.";

  //put whatever I want in burp;

  (*ptr+count)->cArr = burp ; 

   // Assigning pointer to a pointer , OK. Remember pointer != Array.


  //is this right? Or do I have to memcpy to it, and if so how?


  //count++; // Has no use in your code, enclose in a loop to then use it.


  printf("%s\n",(*ptr + count)->cArr); // This works , I think.


 }

对于数组,即char cArr [500],

如果你想使用memcpy你可以使用它:

memcpy((* ptr + count) - &gt; cArr,burp,500);

Strcpy也有效:

strcpy((* ptr + count) - &gt; cArr,burp);

两点很重要:

  1. 允许指向指针的指针,但不允许指定数组的深层副本。

  2. ** ptr是一个双指针。所以,(* ptr + count)或ptr [count]是指向struct的指针。

  3. 你的答案不需要第二点。

答案 1 :(得分:0)

您可以使用strcpy复制字符串。

strcpy(ptr[count]->cArr,burp);

但strcpy终止于null字符。因此,请确保您的字符串(即burp)已正确初始化。

答案 2 :(得分:0)

我想你想做的就是在你的结构中存储一些文字供以后使用。

struct mystruct {
   char carr[500];
}

struct mystruct *ptr = NULL;
int count = 0;

main{

    ...
    ptr = malloc( 20 * sizeof(struct test) );
    //Function call func()
    ...
    //After performing work
    free( ptr );
}

//Some function
func() {
    char burp[500];
    // burp has some data fed
    memcpy( ptr[count]->carr, burp, 500 );
}