argv[1]
кажется, возвращает 1 дополнительный символ, чем то, что вводится. argv[2]
верно.
#include <stdio.h>
int main(int argc, wchar_t *argv[])
{
printf("%d %d\n",wcslen(argv[1]),wcslen(argv[2]) );
return 0;
}
Я использую mingw32 для компиляции. Я собираю с gcc myprog.c
,
Почему это так?
Вот цитата из черновика стандарта C, n1570.pdf:
5.1.2.2.1 Запуск программы
1 Функция, вызываемая при запуске программы, называется основной. Реализация не объявляет прототип для этой функции. Он должен быть определен с типом возврата int и без параметров:
int main(void) { /* ... */ }
или с двумя параметрами (именуемыми здесь как argc и argv, хотя могут использоваться любые имена, так как они являются локальными для функции, в которой они объявлены):
int main(int argc, char *argv[]) { /* ... */ }
или эквивалент;10) или каким-либо другим способом, определяемым реализацией.
10) Таким образом, int может быть заменено именем typedef, определенным как int, или тип argv может быть записан как char ** argv, и так далее.
Это должно быть довольно просто для понимания. Если ваша реализация поддерживает argv с типом wchar_t **, то она будет работать с вашей реализацией в зависимости от реализации. Если вам требуется переносимость, не полагайтесь ни на что, определяемое реализацией.
Хорошая ссылка на это в Функция CommandLineToArgvW.