[си] не пойму кусок кода [closed]
Данный код может соответствовать стандарту C99. Больше про него ничего сказать нельзя
Почему + 1 ?и действительно, почему ?
а GetModuleFileNameW нету что-ли?
Данный код может соответствовать стандарту C99. Больше про него ничего сказать нельзя
Код - это кусок одной из найденных в инете реализаций функции CommandLineToArgvW, отвечающий за то, чтобы если не указаны параметры, вернуть массив с одним элементом: путем к файлу.
и действительно, почему ?Если это сарказм то я его не понял...
Да лана, не принимай близко к сердцу. Это я так, в порядке флуда. Лезть в гугль (или еще куда-то) неохота.
Это, кстати, для меня момент несущественный, т.к. я в tchar'ы и без MultiByteToWideChar буду переписывать
Мне непонятно почему память под строку так хитро выделяется
argv это, упрощённо, "char**", а на деле LPWSTR*, где LPWSTR в свою очередь является WCHAR*.
Короче, массив массивов это. Или массив указателей, как больше нравится. Поэтому чтобы передать туда единственную строчку, нужно выделить память под строчку плюс память под указатель на неё. Поэтому прибавляется эта шняга и поэтому же +1.
Спасибо. Теперь все встало на свои места.
Зачем оно вообще надо?
Так что в коде видимо следовало бы написать 2* sizeof(LPWSTR) и +2, и добавить lpArgvW[1] = NULL;
The argument vector is always kept terminated with a @code{NULL} arg pointer, so it can be passed to @code{freeargv} at any time, or returned, as appropriate.
Но, честно говоря, я так и не понял зачем это нультерминирование надо, если есть argc.
Оставить комментарий
feliks28
Код - это кусок одной из найденных в инете реализаций функции CommandLineToArgvW, отвечающий за то, чтобы если не указаны параметры, вернуть массив с одним элементом: путем к файлу.Что мне непонятно:
103: Причем тут sizeof(LPWSTR) ? В cchNeeded уже же хранится <длина строки> + 1. Этого недостаточно?
107: Почему + 1 ?