почему wcslen считает 1 дополнительный символ в argv [1]?

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 ,

Почему это так?

1

Решение

Вот цитата из черновика стандарта 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 **, то она будет работать с вашей реализацией в зависимости от реализации. Если вам требуется переносимость, не полагайтесь ни на что, определяемое реализацией.

1

Другие решения

Хорошая ссылка на это в Функция CommandLineToArgvW.

0

По вопросам рекламы [email protected]