Coh*_*een -1 c global-variables
我用以下输出编写了这个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这样的输出?是什么原因?
当我删除:
柜台; //用于计算临时工
...我有:
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标准的角度来看,未定义的行为甚至可能导致您的机器爆炸.
默认情况下,全局变量初始化为零.
 int counter; // for counting temporaries
 char s[10];
 sprintf(s,"T%d",counter++);
如果希望局部变量在对函数的调用之间保持相同,则可以进行以下操作static:
static int counter = 0;
同时拥有同名的本地变量和全局变量也是一个坏主意.删除行时,最终使用全局变量.那就是它的原因.
| 归档时间: | 
 | 
| 查看次数: | 80 次 | 
| 最近记录: |