我希望做到以下几点:
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);
那么工作呢?
答案 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);
两点很重要:
允许指向指针的指针,但不允许指定数组的深层副本。
** ptr是一个双指针。所以,(* ptr + count)或ptr [count]是指向struct的指针。
你的答案不需要第二点。
答案 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 );
}