2015-01-13 4 views
-3

следующий код для печати значения 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); 
} 
+0

Ну ты ступил через код в отладчике и изучили все переменные и т.д.? Это первое, что нужно сделать. Это выглядит как искусственно созданная головоломка, а не настоящий код, который любой желал бы реализовать. – OldProgrammer

+0

ну, это искусственно сделано. Я просто хочу попытаться это сделать. – TzviKarp

+0

Переменная 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. Каждый раз, когда вы запускаете свою программу, вы увидите одно и то же значение. –

ответ

1

Ваш печать адрес d, вам необходимо разыменования указателя, если вы хотите отпечатке значение, хранящееся в адресе, где d наведен на.

printf("%d\n", *d); 

В следующий раз, прежде чем обратиться в отладчик :)

+0

Благодарим вас за ответ. Я уже пробовал то, что вы сказали. Это не работает. он по-прежнему печатает неправильное значение. Я также пытался использовать отладчик, не мог понять, как это сделать. – TzviKarp