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

Discussion in 'LANGS.C' started by Y_Mur, Mar 16, 2009.

  1. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    Не пойму кто тупит я или msvc 9?
    банальнейший код:
    Code (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

    Blog Posts:
    0
    Joined:
    Sep 3, 2006
    Messages:
    355
    Как написал, так и работает)
    Code (Text):
    1. szOUT[0] = (TCHAR) *"F";
    2. // или ты имел в виду
    3. szOUT[0] = (TCHAR) 'F';
    4. // ?
     
  3. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    iZzz32
    Спасибо
     
  4. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Code (Text):
    1. szOUT[0] = (TCHAR)'F';
     
  5. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    хм и *"D" и 'D' генерят один и тот же код:
    MOV BYTE PTR SS:[ESP+11],44h
    хотя первое разименованная ссылка на строку, а второе символ.
    ещё раз спасибо - дошло кто тупит :))