我想做以下事情:
结构定义:
struct mystruct {
char cArr[500];
}
全局:
struct mystruct **ptr;
int count = 0;
主要:
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);
那么工作?
#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("%sn",(*ptr + count)->cArr); // This works , I think.
}
对于阵列,即char cArr[500]、
如果你想使用memcpy,你可以使用它:
memcpy((*ptr+count)->cArr,burp,500);
Strcpy也起作用:
strcpy((*ptr+count)->cArr,burp);
有两点很重要:
允许将指针分配给指针,但不允许数组的深度复制。
**ptr是一个双指针。因此,(*ptr+count)或ptr[count]是指向结构的指针。
你的答案不需要第二点。
您可以使用strcpy来复制字符串。
strcpy(ptr[count]->cArr,burp);
但是strcpy终止于null字符。因此,请确保您的字符串(即打嗝)已正确初始化。
我想您所想做的就是在结构中存储一些文本以供以后使用。
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 );
}