gpt4 book ai didi

c - 在 C 循环的每次迭代中初始化不同的数组

转载 作者:行者123 更新时间:2023-11-30 16:20:49 26 4
gpt4 key购买 nike

我试图做一个问题,要求用户输入并将该输入多次存储在数组中(所以我使用了循环)。然而,即使我在每次迭代中声明并初始化一个新的 char 数组并将其存储在 char * 数组中,存储在 char * 数组中的所有 char 数组(在本例中我试图将它们用作字符串)似乎都具有相同的值内存地址,即使我每次都声明一个新的!这是怎么发生的?

非常感谢!!

下面是一个简化的代码片段,用于演示我正在谈论的行为。运行时,所有输出仅为 9。“请求输入”被简化为在数组中插入与索引相关的值

int main(int argc, char** argv){

char* batsman[10];
for(int i = 0; i < 10; i++){
char newString[2];
newString[0] = i + 48;
newString[1] = '\0';
batsman[i] = newString;
}

for(int i = 0; i < 10; i++){
printf("%s\n",batsman[i]);
}
return 0;
}

最佳答案

没有理由认为这不会发生。

您创建一个对象(一个数组),然后它超出范围(当循环结束时)。现在它在内存中的位置可以被其他东西占用。

碰巧(纯属偶然),您的下一个对象(另一个数组)获得了相同的地址。下次可能会有所不同。没关系!

当你搬家时,你关心之后谁搬进去吗?也许它会空置几年。也许它一直空着,直到被拆除,为一排商店腾出空间。也许它会被一个可爱的家庭立即接管,重新粉刷它并将其变成一座欢笑宫殿。 但你已经不在了,所以无论如何,这对你来说都不会产生丝毫影响。你走了。你搬家了。

别介意这个。您的程序已损坏,因为您正在存储指向超出范围的变量的悬空指针。不要那样做。使用std::vector<std::string>相反。

有关“原始”C 样式数组的复杂性的更多信息,请参阅您的书籍。

关于c - 在 C 循环的每次迭代中初始化不同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55153108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com