Проблеммы с нуль символами в char
От: Crach  
Дата: 18.10.03 15:27
Оценка:
Получил я список дисков с помощью апи:

char buf[256];
GetLogicalDriveStrings(256,buf);

Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь? Все имена дисков нада загнать в ComboBox. Я конечно подумал прогнать весь массив символов через цикл и нуль символы заменить на какой нибудь символ. Ну и ладно получу я строку дисков разделенную каким нибудь символом. Тут нужна функция вырезки, как я понимаю.
Спасибо.
Re: Проблеммы с нуль символами в char
От: LaptevVV Россия  
Дата: 18.10.03 15:32
Оценка:
Здравствуйте, Crach, Вы писали:

C>Получил я список дисков с помощью апи:


C>char buf[256];

C>GetLogicalDriveStrings(256,buf);

C>Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь? Все имена дисков нада загнать в ComboBox. Я конечно подумал прогнать весь массив символов через цикл и нуль символы заменить на какой нибудь символ. Ну и ладно получу я строку дисков разделенную каким нибудь символом. Тут нужна функция вырезки, как я понимаю.

А почему ты не используешь string?
Там и substr есть, и findы всякие можно использовать, и replacы и много чего еще.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Проблеммы с нуль символами в char
От: MaximE Великобритания  
Дата: 18.10.03 18:04
Оценка:
Здравствуйте, Crach, Вы писали:

C>Получил я список дисков с помощью апи:


C>char buf[256];

C>GetLogicalDriveStrings(256,buf);

C>Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь? Все имена дисков нада загнать в ComboBox. Я конечно подумал прогнать весь массив символов через цикл и нуль символы заменить на какой нибудь символ. Ну и ладно получу я строку дисков разделенную каким нибудь символом. Тут нужна функция вырезки, как я понимаю.


Резать не обязательно — виндовые ф-ции принимают строчки заканчивающиеся нулевым символом, оставшиеся символы за нулевым игнорируются. Поэтому задачу можно упростить до поиска начала следующей строчки.

void populate_combo(HWND combo, const char* strings_begin, const char* strings_end)
{
    while(strings_begin < strings_end && *strings_begin)
    {
        ::SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)strings_begin);
        strings_begin = std::find(strings_begin, strings_end, '\0');
        ++strings_begin;
    }
}

void f()
{
    char buf[256];
    ::GetLogicalDriveStrings(256,buf);
    populate_combo(0, buf, buf + 256);
}
Re: Проблеммы с нуль символами в char
От: tonal www@promsoft.ru
Дата: 19.10.03 11:13
Оценка: 29 (2)
C>Получил я список дисков с помощью апи:

C>char buf[256];

C>GetLogicalDriveStrings(256,buf);

C>Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь?


Классически это пишется так:
for (const char* str = buf; *str; str += strlen(str) + 1) 
  MyCooolAlgorithmForStr(str);
... << RSDN@Home 1.1 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.