我有一组struct
指针,每个struct
内是另一个struct
,其中包含一个名为firstname
的字段,firtstname是char *.
{当程序首次运行以形成链接列表时,{1}}将填充文件中的数据。我的定义如下......
struct
我从用户那里得到一个字符串输入并将其存储在char *中(它指向与原始内存大小相同的内存块),现在我想要查找由
访问的char *struct person
{
char *firstname;
char *lastname;
};
struct node
{
struct person employee;
struct node *next;
};
struct node *nodes[MAX_NODES];
到char *我刚刚从用户那里读到。我试过了
nodes[index]->data.firstname
使用printf()对上面的内容进行了测试,但它似乎有效,但是稍后打印出数据会打印旧数据。这是为什么?
答案 0 :(得分:2)
最有可能的是,你有两个指向同一块内存的指针。
您可能希望使用malloc()
为复制的字符串分配额外内存,然后使用strcpy()
或strncpy()
将原始字符串复制到该新内存块。
答案 1 :(得分:0)
由于数组未意外更改为新值,但将恢复为“旧”值,我认为问题实际上是按值参数传递。
您要将结构的实例传递给函数并在其中修改其firstname
指针。然后,它(显然)在函数的其余部分中具有正确的值,但是一旦函数退出就不再有。
解决方案是将指针传递给您的结构。指针被复制到函数内部,两个副本自然指向同一个对象,然后您可以在函数内修改它。
void changeByVal(struct person person) {
person.firstname = malloc(FIRST_NAME_LEN);
strcpy(person.firstname, "John Doe");
}
void changeByPtr(struct person *person) {
person->firstname = malloc(FIRST_NAME_LEN);
strcpy(person->firstname, "John");
}
int main(int argc, char **argv) {
struct person p1, p2;
p1.firstname = "Jane";
changeByVal(p1);
changeByref(p2);
// Prints "We have Jane and John" instead of "John and John"
printf("We have %s and %s", p1.firstname, p2.firstname);
}