gpt4 book ai didi

c - 为了安全起见,我应该始终动态分配数组吗?

转载 作者:行者123 更新时间:2023-11-30 18:29:38 26 4
gpt4 key购买 nike

我正在编写一个简单的程序并创建一个数组来存储 4 个整数。然后我用了for循环分配它们;之后我使用了 gets()获取字符串的函数;使用gets()后函数数组中的第一个整数总是会变成 0。我什至在 gets() 之前和之后在屏幕上打印了变量。确认。

唯一解决这个问题的是动态分配数组,所以现在我想知道是否应该始终动态分配数组以防止此类问题?

代码:

int nums[4];
int i = 0;
char symbols[3];

for(i=0;i<4;i++){
scanf("%d", &nums[i]);
}

fflush(stdin);
gets(symbols);
calculate(nums, symbols);

最佳答案

不,你不应该。

如果您在编译时不知道数组的大小,则应该动态分配数组。如果您在编译时知道大小,请静态分配它。

在这两种情况下,您都应该仔细考虑尺寸 - 例如如果您忘记了 C 字符串末尾的 '\0',您最终将写入未分配的内存中。

在您的程序中,问题是您使用了 gets() ,即 unusably dangerous 。它几乎肯定会溢出你的字符串,导致未定义的行为。在您的程序中,未定义的行为表现为对整数数组的意外更改。与字符串相比,使用动态内存分配改变了数组的存储位置;它改变了未定义的行为,但没有解决问题(即您这样做时溢出了字符串缓冲区并调用了未定义的行为)。

关于c - 为了安全起见,我应该始终动态分配数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36121056/

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