Как получить нужную строку из многострочного CEdit?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 19.03.18 12:30
Оценка:
Есть некоторое многострочное текстовое поле IDC_EDIT1, которому соответствует переменная m_IDC_EDIT1 типа CEdit.
В этом IDC_EDIT1 содержится текст:

"строка1\r\nстрока2\r\nстрока3\r\n<...>строкаN"

То есть в этом IDC_EDIT1 находятся строки:

строка1
строка2
строка3
<...>
строкаN

Как программно получить i-ую (например, самую первую строку) из этого текстового поля?
1613 г. = 2024 г.
Re: Как получить нужную строку из многострочного CEdit?
От: Maniacal Россия  
Дата: 19.03.18 14:20
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>строка1

RF>строка2
RF>строка3
RF><...>
RF>строкаN

RF>Как программно получить i-ую (например, самую первую строку) из этого текстового поля?


CEdit e;
...
TCHAR acBuffer[1024];
e.GetLine(0, acBuffer, sizeof(acBuffer)); // первая строка
e.GetLine(e.GetLineCount() — 1, acBuffer, sizeof(acBuffer)); // последняя строка
Re[2]: Как получить нужную строку из многострочного CEdit?
От: VladFein США  
Дата: 20.03.18 15:20
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>TCHAR acBuffer[1024];

M>e.GetLine(0, acBuffer, sizeof(acBuffer)); // первая строка
M>e.GetLine(e.GetLineCount() — 1, acBuffer, sizeof(acBuffer)); // последняя строка

Это — надёжный кандидат на buffer overflow.
ОСОБЕННО в комбинации с TCHAR !
https://stackoverflow.com/questions/33523585/how-do-sizeofarr-sizeofarr0-work
Re[3]: Как получить нужную строку из многострочного CEdit?
От: Maniacal Россия  
Дата: 20.03.18 15:29
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Это — надёжный кандидат на buffer overflow.

VF>ОСОБЕННО в комбинации с TCHAR !
VF>https://stackoverflow.com/questions/33523585/how-do-sizeofarr-sizeofarr0-work

Это точно, нужно sizeof(acBuffer) / sizeof(acBuffer[0]),
Сначала я просто хотел написать CEdit::GetLine(...), но подумал не так наглядно будет
Re[4]: Как получить нужную строку из многострочного CEdit?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 23.03.18 13:00
Оценка:
Ясно.

Но вот такой возникает вопрос: функция CEdit::GetLine помещает в переменную acBuffer типа TCHAR* строку, но может не завершить её NULL-символом. Как быть в этом случае?
1613 г. = 2024 г.
Re[5]: Как получить нужную строку из многострочного CEdit?
От: Maniacal Россия  
Дата: 23.03.18 13:09
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Ясно.


RF>Но вот такой возникает вопрос: функция CEdit::GetLine помещает в переменную acBuffer типа TCHAR* строку, но может не завершить её NULL-символом. Как быть в этом случае?

Я обычно после такой операции присваиваю 0 последнему символу буфера.

TCHAR buffer[10];
static_cast<CEdit*>(GetDlgItem(IDC_EDIT1))->GetLine(0, buffer, sizeof(buffer) / sizeof(buffer[0]));
buffer[sizeof(buffer) / sizeof(buffer[0]) - 1] = 0;
Re[5]: Как получить нужную строку из многострочного CEdit?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 03.04.18 08:27
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Ясно.


RF>Но вот такой возникает вопрос: функция CEdit::GetLine помещает в переменную acBuffer типа TCHAR* строку, но может не завершить её NULL-символом. Как быть в этом случае?

CEdit::GetLine вернет, сколько символов скопировано в буфер.
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.