我正在做一项作业,遇到了具有挑战性的问题。就我而言,从我所了解的情况来看,下面的代码应该是正确的,但它不起作用。基本上我想要的是将字符串值复制到结构的变量成员中,该结构是作为指针传递给方法的数组的一部分。我错过了什么?
typedef struct
{
char * name; //variable in struct I am trying to access
} Struct;
void foo(Struct * arr) //array of Structs passed into function as a pointer
{
int i = 0;
while(i++ < 2)
{
arr[i].name = malloc(sizeof(char *)); //assigning memory to variable in each Struct
arr[i].name = strdup("name"); //copying "name" to variable in each Struct
printf("C - %s\n", arr[i].name); //printing out name variable in each Struct
}
}
main()
{
Struct * arr; //defining pointer
arr = calloc(2, sizeof(Struct)); //allocating memory so pointer can hold 2 Structs
foo(arr); //calling function foo passing pointer into function
return 0;
}
这段代码可以编译和运行,但是它并没有按照设计的目的运行。如果这是微不足道的事情,请原谅我。我是 C 语言的新手
最佳答案
两个问题:
-
while(i++ < 2)
此行更改i
的值一旦它检查它,您的循环体将与检查时不同。 -
arr[i].name = strdup("name");
覆盖.name
的值指针,导致你的内存泄漏malloc()
早前编辑。
关于更改结构数组元素中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306072/