Первоначальное распределение argv
оставлено на усмотрение компилятора / среды выполнения. Так что может небезопасно изменять его волей-неволей. Многие системы строят его в стеке, поэтому он автоматически освобождается при возвращении main. Другие строят его в куче и освобождают (или нет), когда main возвращается.
Можно безопасно изменить значение аргумента, если вы не пытаетесь увеличить его (ошибка переполнения буфера). Можно сменить порядок аргументов.
Чтобы удалить аргументов, которые вы предварительно обработали , будет работать что-то вроде этого:
(множество условий ошибок не проверено, «--special», другие что первый аргумент не проверен и т. д. Это, в конце концов, просто демонстрационная концепция.)
int main(int argc, char** argv)
{
bool doSpecial = false; // an assumption
if (0 == strcmp(argv[1], "--special"))
{
doSpecial = true; // no longer an assumption
// remove the "--special" argument
// but do copy the NULL at the end.
for(int i=1; i
Но посмотрите на это для полной манипуляции: (часть libiberty библиотека, которая используется для управления векторами стиля argv)
http://www.opensource.apple.com/source/gcc/gcc-5666.3/libiberty/argv.c
Это лицензированный GNU LGPL.
EXPECT_FATAL_FAILURE (оператор, текст) и EXPECT_NONFATAL_FAILURE (оператор, текст) будет только передача , если 'оператор' вызовет сбой ASSERT_x или EXECT_x соответственно.
Эти операторы передадут в Ваших тестах:
EXPECT_NONFATAL_FAILURE( EXPECT_TRUE( 0 ), "" );
EXPECT_FATAL_FAILURE( ASSERT_TRUE( 0 ), "" );