странность со значением/указателем

Тема в разделе "LANGS.C", создана пользователем Y_Mur, 16 мар 2009.

  1. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Не пойму кто тупит я или msvc 9?
    банальнейший код:
    Код (Text):
    1.     TCHAR szOUT[1024] = "asdf";
    2.     szOUT[0] = (TCHAR)"F";
    3.     szOUT[1] = (TCHAR)"D";
    4.     MessageBox(0, szOUT, "Тест", MB_OK);
    5.  
    6. генерит:
    7. MOV EAX,0040211C
    8. MOV ECX,00402120
    9. MOV BYTE PTR SS:[ESP+10],AL
    10. MOV BYTE PTR SS:[ESP+11],CL
    11.  
    12. вместо:
    13. MOV EAX,[0040211C]
    14. MOV ECX,[00402120]
    15. MOV BYTE PTR SS:[ESP+10],AL
    16. MOV BYTE PTR SS:[ESP+11],CL
    В итоге в соответсвующих позициях строки вместо символов "F" и "D" оказываются младшие байты их адресов.
    Картина сохраняется и в unicode и в debug и в release и при отключении оптимизиции.
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Как написал, так и работает)
    Код (Text):
    1. szOUT[0] = (TCHAR) *"F";
    2. // или ты имел в виду
    3. szOUT[0] = (TCHAR) 'F';
    4. // ?
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    iZzz32
    Спасибо
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. szOUT[0] = (TCHAR)'F';
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    хм и *"D" и 'D' генерят один и тот же код:
    MOV BYTE PTR SS:[ESP+11],44h
    хотя первое разименованная ссылка на строку, а второе символ.
    ещё раз спасибо - дошло кто тупит :))