CEdit :: GetLine (MFC, VC ++ 6) возвращает лишние символы в Windows 7

m_editText имеет тип CEdit (из MFC). Это отлично работало в течение многих лет с сотнями пользователей в WinXP (32-разрядная версия), но когда тот же исполняемый файл находится на Win7 (64-разрядной версии), некоторые пользователи получают (в strText) дополнительные странные (т.е. расширенные, т.е. мусорные) символы, добавленные к тексту. которые они набрали в поле редактирования (m_editText). Я не могу воспроизвести проблему. Я проверил, что GetLine копирует только символы, введенные в поле редактирования (по крайней мере, на моей машине).

TCHAR atchBuffer[256] = {0};  // initialize to all nulls
int nChrCount = m_editText.GetLine(0, atchBuffer, 255);
CString strText;
if (nChrCount!=0)
    strText = CString(atchBuffer);

Это скомпилировано (отладочная сборка) в Visual C ++ 6 на WinXP (32 бит), MFC 5 статически скомпонован. Мы будем очень благодарны за любую предоставленную информацию.


person Bruce    schedule 18.05.2012    source источник
comment
Возможный дубликат: stackoverflow.com/questions/5637153/ceditgetline-windows-7   -  person Jeeva    schedule 18.05.2012


Ответы (1)


Измените свой код следующим образом:

if (nChrCount!=0)
    strText = CString(atchBuffer, nChrCount);

чтобы убедиться, что какие-либо ненужные / неинициализированные данные не добавляются в CString, а только символы, которые находятся в элементе управления.

person Stefan    schedule 20.05.2012
comment
Да, вдвойне убедиться, что strText содержит только символ, введенный в поле редактирования, - это то, что мы решили сделать, поскольку я не могу воспроизвести проблему или удаленно отладить ее на нескольких (Win7) машинах, на которых она возникает. Может быть, глубоко внутри Windows что-то затерло мои 0 в atchBuffer. Спасибо. - person Bruce; 22.05.2012