【发布时间】:2017-01-09 21:49:03
【问题描述】:
我正在学习 C 并且正在玩结构,但我发现了一些我无法解释的行为,我想知道它为什么会发生。
这是我的代码:
struct my_struct{
char *name;
};
int main()
{
struct my_struct arr[3];
int i = 0;
char str[10];
while (i<3)
{
fgets(str, 10, stdin);
arr[i].name = str;
printf("Array number %d: %s", i, arr[i].name);
i++;
}
printf("1 - %s\n2 - %s\n3 - %s", arr[0].name, arr[1].name, arr[2].name);
return 0;
}
我的意见:
test1
test2
test3
预期输出:
Array number 0: test1
Array number 1: test2
Array number 2: test3
1 - test1
2 - test2
3 - test3
结果输出:
Array number 0: test1
Array number 1: test2
Array number 2: test3
1 - test3
2 - test3
3 - test3
结果输出:
问题是,只要 while 循环继续运行,它似乎就可以了;但是,当它退出时,它似乎将数组中结构的每个“名称”值设置为最后一个。
如果,一旦退出循环并在最后一个 printf() 之前,我手动设置了数组中最后一个结构的名称,这是唯一更新的结构,但之前的结构的名称仍然设置为最后一个进入循环内。
我想我错过了一些关于内存管理的信息,比如在再次调用 fgets() 之前刷新缓冲区或某事,但无法弄清楚发生了什么。有人知道这是怎么回事吗?
【问题讨论】: