在下面的代码中,我无法弄清楚为什么在添加2个(或更多)User_struct后运行dump_data()方法时获得相同输出(即同名)的原因不同的名称)使用addUser()方法。
struct Friends_struct {
struct User_struct *this;
struct Friends_struct *next;
};
typedef struct Friends_struct *Friends;
typedef struct User_struct {
const char *name;
Friends amigos;
} User;
static User **userList; // global table of users
static int numUsers; // global number of users
static int tableSize; // global size of table
void create_amigonet() {
tableSize = INIT_TABLE_SIZE;
numUsers = 0;
userList = malloc(tableSize * sizeof(User *));
}
void addUser(const char *name) {
userList[numUsers] = malloc(sizeof(User));
userList[numUsers]->name = name;
userList[numUsers]->amigos = 0;
numUsers++;
if (numUsers == tableSize) {
tableSize += INIT_TABLE_SIZE;
User **moreUsers;
moreUsers = realloc(userList, tableSize * sizeof(User *));
userList = moreUsers;
}
}
void dump_data() {
for (int i=0; i<numUsers; i++) {
printf("%s; friends:", userList[i]->name);
}
printf("\n");
}
不同的.c文件:
void do_add(const char *name) {
addUser(name);
}
int main(void) {
create_amigonet();
do_add("Dan");
do_add("Jim");
dump_data();
}
如果运行,我期望的输出就像
Dan; friends:
Jim; friends:
但我正在
Jim; friends:
Jim; friends:
我如何/在哪里覆盖我的数据?
答案 0 :(得分:0)
问题是你只在char
中存储了一个User_struct
指针,而在addUser
调用中传递的指针只是临时指针。您应该将name
的类型更改为足够长度的char
数组,并使用strcpy
在addUser
内复制该名称。
我无法完全解释为什么该示例实际显示错误,因为我认为两个名称字符串在整个main()
中都应该有效,但似乎生成的代码重用了&#34; Dan&#34的位置;存储,因此你得到&#34;吉姆&#34;第二次addUser
电话后两次。