Войти

Показать полную графическую версию : Создание массива строк,где  каждая строка оканчивается null


Crew
18-04-2003, 21:47
Несомненно, что многим приложениям приходится выполнять различные файловые операции, как-то копирование, перемещение, удаление или переименование файлов. Есть строенная поодержка файловых операций в Win32 допускает использование джокерных символов (я не знаю, что это такое) и указывать целые ветви каталогов. Прототип функции:

WINSHELLAPI int WINAPI SHFileOperation (LPSHFILEOPSTRUCT lpFileOp);


В функцию передается только структура, которая определяет способ выполнения оболочкой файловых операций. Состав структуры:

typedef struct_SHFILEOPSTRUCT {
   HWND hWnd;
   UINT wFunc;
   LPCSTR pFrom;
   LPCSTR pTo;
   FILEOP_FLAGS fFlags;
   BOOL fAnyOperationAborted;
   LPVOID hNameMappings;
   LPCSTR lpszProgressTitle;
}
 
.......
Файлы, над котороми выполняются операции, определяются параметрами pFrom и pTo, которые в действительности являются указателями на массив строк. Каждая строка заканчивается нулем (значением null), конец массива обозначется двумя значениями null. Даже если передается единственное имя файла, строка завершается двойным null.

Так вот у меня совсем не получается создать такой массив строк. Я даже не знаю с какой стороны подлезть, потому-что в моем понимании '\0' означает конец строки и все функции работы со строками думают точно так же. Или я не так понял null?
Если кто пользовался приведенной функцией, пожалуйста пример :)

ivank
19-04-2003, 16:44
Crew
Если я правильно понял, то передаётся нечто вроде "C:\\some\\path\\file\0C:\\some\\another\\path\\file\0\0"

Crew
19-04-2003, 22:46
а вот как программным  способом их склеить?
strcat мне не помог

ivank
20-04-2003, 01:12
Crew
Ручками :) Код тривиален.

Crew
20-04-2003, 17:00
Если б догадался не спрашивал бы. Флеймим, товарищь модератор? :)

shurikan
22-04-2003, 01:56
Crew
Да не флеймит он...
Выделяешь буфер достаточного размера. Используешь указатель на этот буфер. Копируешь через этот указатель одну строку. Ищешь '\0'. Устанавливаешь указатель на следующий байт. Копируешь через этот указатель следующую строку... И т.д. Пока строки не закончатся. А как закончились, записываешь ещё один нолик...:biggrin:

Crew
22-04-2003, 16:59
shurikan
спасибки:biglaugh:




© OSzone.net 2001-2012