gpt4 book ai didi

c - atoi 函数的未定义行为

转载 作者:行者123 更新时间:2023-11-30 21:32:36 26 4
gpt4 key购买 nike

以下代码显示了奇怪的行为:

int main()
{
char numArr[] = {'9','8','5'};
int num;
printf("%d\n",num);
num = atoi(numArr);
printf("%d\n",num);
return 0;
}

我还没有初始化num,因此它包含一个垃圾值(在我的例子中为51),并且当我存储atoi()的返回值时 在 num 中,垃圾被覆盖,并且它获取由 atoi 返回的值,并附加 3(51 的字符) ),因此转换后的输出是 9853 而不是 985

如果我用任何值初始化 num 并且没有看到附加项,它也会显示正确的行为。

  • 如果我在 ideone 中尝试它得到了正确的结果(因为它们自动用 0 初始化 num),但在我的机器上的 code::blocks 中工作不正常。

我想知道为什么垃圾值被附加到返回值?

最佳答案

I want to know why the garbage value is being appended to return value ?

因为将垃圾值附加到返回值是未定义行为的有效行为。

更一般地说:具有未定义行为的程序没有(你客气的)定义的行为。也就是说程序可以崩溃,可以输出任何内容,可以输出并崩溃,可以输出但不结束......你明白了。

<小时/>

顺便说一句,您有 2 个 UB 来源:

  • 访问未初始化的变量num

  • 没有空终止字符串作为参数传递给 atoi

关于c - atoi 函数的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859675/

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