следующий код для печати значения a. Вместо этого он печатает какое-то случайное значение. Можете ли вы мне помочь?Печать неправильного значения
void main()
{
int a=113, b=126, *d ;
char *temp, *temp4,*j, *g;
j=(char*)(&a);
g=(char*)(&b);
temp=strcat(j,",");
temp=strcat(temp,g);
temp4=strtok(temp, ",");
d=(int*)(temp4);
printf("%d\n",d);
}
Ну ты ступил через код в отладчике и изучили все переменные и т.д.? Это первое, что нужно сделать. Это выглядит как искусственно созданная головоломка, а не настоящий код, который любой желал бы реализовать. – OldProgrammer
ну, это искусственно сделано. Я просто хочу попытаться это сделать. – TzviKarp
Переменная temp4 указывает на первый токен в temp, который разделяется запятой. Фактически это указывает на байты '113', '44', '126' и '0'. С d = (int *) (temp) вы создаете char * для int *, поэтому d указывает на те же байты, что и temp4. Когда вы выполняете printf («% d \ n», d), вы на самом деле печатаете адрес целого числа, на которое указывает d. Когда вы выполняете printf ("% d \ n", * d), вы печатаете значение целого числа, на которое указывает d. Значение сохраняется в 4 байтах, которые я описал ранее. Интерпретируется как int, это 8257649. Каждый раз, когда вы запускаете свою программу, вы увидите одно и то же значение. –