1、碰到的问题,循环对数组指针赋值,最后数组中所有的指针都指向最后赋值的那个值。
代码:
int main()
{
vector<char*> Group;
for (int i = 0; i < 5; i++) {
char group[256];
sprintf_s(group, "%d\n", i);
Group.push_back(group);
}
for (int j = 0; j < 5; j++) {
printf(Group[j]);
}
}
运行结果:
2、原因
我尝试者在for循环中每次都输出group的地址,发现每次的地址都是一样的,如下所示。
看到这个之后对上面的问题也就不奇怪了。
但是按理说每次我都是重新定义的变量,只是名字相同而已,为什么地址是相同的呢?也不太了解。
3、解决办法?如何才能定义变量是的每次都是不同的地址呢 ?将group定义如下的方式即可解决。
int main()
{
vector<char*> Group;
for (int i = 0; i < 5; i++) {
char group[5][256];
printf("%p\n", group[i]);
sprintf_s(group[i], "%d\n", i);
Group.push_back(group[i]);
}
for (int j = 0; j < 5; j++) {
printf(Group[j]);
}
}
现在结果就正确了。