c++ - visual - CEdit:: GetLine() windows 7
microsoft visual c++ 2017 redistributable package(x86) (2)
Tengo el siguiente segmento de código donde m_edit
es un control CEdit:
TCHAR lpsz[MAX_PATH+1];
// get the edit box text
m_edit.GetLine(0,lpsz, MAX_PATH);
Esto funciona perfectamente en computadoras con Windows XP y versiones anteriores. No he probado esto en Vista, pero en Windows 7, lpsz pone caracteres unicode basura insertados en él (así como el texto real a veces). ¿Alguna idea de lo que está pasando aquí?
Como está utilizando MFC, ¿por qué no aprovecha su clase CString
? Esa es una de las razones por las que muchos programadores se sintieron atraídos por MFC, porque hace que trabajar con cadenas sea mucho más fácil.
Por ejemplo, simplemente podría escribir:
int len = m_edit.LineLength(m_edit.LineIndex(0));
CString path;
LPTSTR p = path.GetBuffer(len);
m_edit.GetLine(0, p, len);
path.ReleaseBuffer();
(El código anterior está probado para funcionar bien en Windows 7.)
Tenga en cuenta que la línea copiada no contiene un carácter de terminación nula (consulte la sección "Observaciones" en la documentación ). Eso podría explicar los personajes sin sentido que estás viendo en las versiones posteriores de Windows.
No es nulo terminado. Usted necesita hacer ésto:
int count = m_edit.GetLine(0, lpsz, MAX_PATH);
lpsz[count] = 0;