Я написал эту программу C с последующим выходомОбъясните следующий вывод для программы 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 counter; // для подсчета временных
... Я получил:
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
сделал я также получил правильный результат?
Перед тем, как присвоить ему какое-либо значение, вы читаете локальную переменную ('counter', как указано в' CreateTemp'). Это приводит к неопределенному поведению. Возможно, что-нибудь (включая сбой программы при каждом вызове 'CreateTemp'). –