gpt4 book ai didi

c - 解释 C 程序的以下输出

转载 作者:行者123 更新时间:2023-11-30 18:16:22 25 4
gpt4 key购买 nike

我用以下输出编写了这个 C 程序

#include<stdio.h>
#include<string.h>
int counter; // global for counting input tokens
char * CreateTemp()
{
int counter; // for counting temporaries
char s[10];
sprintf(s,"T%d",counter++);
return(strdup(s));
}
main()
{
char *s1;
char *s2;
char *s3;
s1=CreateTemp();
s2=CreateTemp();
printf("Temp is %s\n",s1);
printf("Temp is %s\n",s2);
s3=CreateTemp();
printf("Temp is %s\n",s3);
}

输出:

Temp is T0  //Temp is T0
Temp is T1 //Temp is T1
Temp is T32600 //Temp is T2

我不知道为什么 T2 会得到这样的输出?原因是什么?

当我删除时:

int 计数器;//用于计算临时数

...我得到:

Temp is T0 
Temp is T1
Temp is T2

为什么,当我删除特定行时:

Int counter; / for counting temporaries

我是否得到了正确的结果,但当我保留它时,我得到了令人困惑的 T2 结果?

另外,为什么当我将 static 添加到:

int counter; // for counting temporaries

成为:

static int counter; // for counting temporaries

并删除:

int counter; // global for counting input tokens

我也得到了正确的结果吗?

最佳答案

默认情况下,局部变量不会初始化,如果没有为它们分配显式值,则使用它们会产生未定义的行为,这意味着任何事情都可能发生

C 标准实际上并没有定义会发生什么,所以前两个字符串正确而最后一个字符串不正确是一个(不)幸运的巧合。从 C 标准的角度来看,未定义的行为甚至可能导致你的机器爆炸。

全局变量默认初始化为零。

关于c - 解释 C 程序的以下输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656854/

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