Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Строки символов


Автор: S.A.G. 14.1.2008, 13:22
Просветите для меня, плиз, следующий момент.

Вот этот код в VC 8 в консольном проекте вызывает вполне нормальную реакцию - заполнение char-массива строкой "Hello, World!" с завершающим нулем:
Код
char szBuf[] = "Hello, World!";


Почему то же самое не работает в Win32 проекте? - В ходе выполнения значение либо нельзя определить, либо записывается непонятно что.

Автор: JackYF 14.1.2008, 13:36
Цитата(S.A.G. @  14.1.2008,  12:22 Найти цитируемый пост)
Почему то же самое не работает в Win32 проекте? - В ходе выполнения значение либо нельзя определить, либо записывается непонятно что.

Код верный, понятие не имею, что там можешь не работать?
Так оно не компилируется или не работает? давай минимальный код, давай симптомы.

Автор: S.A.G. 14.1.2008, 13:43
Вот и мне, аналогично, ничего не понятно.

Добавлено @ 13:57
Есть функция,

Код
void Calc(HWND hwnd)
{
    float Hw, l, q, qn;
    char szBuf[100] = "Hello, World!";
    DWORD cbText;
    
    Hw = 1;
    *(WORD *)szBuf = sizeof(szBuf);
    cbText = (WORD)SendDlgItemMessage(hwnd, IDC_EDIT1, EM_GETLINE, 0, (DWORD)(LPSTR)szBuf);
    
    szBuf[cbText] = '\0';
}


в ней на строке "*(WORD *)szBuf = sizeof(szBuf);" ставлю брейкпойнт, запускаю. Сразу после запуска видно как он перемещается на 2 строчки вниз и, естественно, функция стопорится уже после присваивания *(WORD *)szBuf = sizeof(szBuf);. Почему перескакивает брейкпойнт? Как просмотреть содержимое массива во время выполнения ДО этого действия? Почему присваивание первому слову массива szBuf не затирает первые 4 буквы ("Hell"), а сдвигает их?

Автор: JackYF 14.1.2008, 14:13
Цитата(S.A.G. @  14.1.2008,  12:43 Найти цитируемый пост)
Почему перескакивает брейкпойнт?

Ну это вопрос к вижуаловскому отладчику.

Цитата(S.A.G. @  14.1.2008,  12:43 Найти цитируемый пост)
Почему присваивание первому слову массива szBuf не затирает первые 4 буквы ("Hell"), а сдвигает их?

Давай подробнее, с отладочным выводом.

Автор: S.A.G. 14.1.2008, 14:39
Ну что там еще подробнее. До присваивания хелло ворлд стоит начиная с 0, а после - начиная с 4.

Автор: bsa 14.1.2008, 14:49
S.A.G., отключи оптимизацию

Автор: S.A.G. 14.1.2008, 14:58
Отключил, изменения на лицо. А что - если оптимизация, то она обязательно кривая? Может быть с оптимизацией нет смысла пользоваться дебагером - он будет выдавать всякую чушь?

Автор: bsa 14.1.2008, 15:00
Цитата(S.A.G. @ 14.1.2008,  14:58)
Может быть с оптимизацией нет смысла пользоваться дебагером - он будет выдавать всякую чушь?

именно.

Автор: Rickert 15.1.2008, 04:33
Интересно, никогда такого не встречал.

Автор: bsa 15.1.2008, 13:01
Цитата(Rickert @ 15.1.2008,  04:33)
Интересно, никогда такого не встречал.

Включи оптимизацию и встретишь.

Автор: Lazin 15.1.2008, 13:11
Цитата(bsa @  15.1.2008,  13:01 Найти цитируемый пост)
Включи оптимизацию и встретишь. 

 smile 
при оптимизации, теряется связь между значениями регистра IP и номерами строк, которая определена в pdb-шнике, из за того что компилятор может что-то выкинуть, где-то изменить алгоритм, развернуть цикл...

Автор: archimed7592 15.1.2008, 18:03
Цитата(Lazin @  15.1.2008,  13:11 Найти цитируемый пост)
ри оптимизации, теряется связь между значениями регистра IP и номерами строк, которая определена в pdb-шнике

Да лан, серьёзно что ль? smile
Мне казалось, что отладочная информация добавляется по немного иному алгоритму smile. Хотя... возможно, мой взгляд ограничен использованием GCC.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)