Вернуть массив без знака в основную функцию - PullRequest
0 голосов
/ 25 июня 2019

Фон: мой оригинальный main ():

int main(int argc, char *argv[])
{
    unsigned char output[16] = {0x00};  // copied from code

    // .... (some steps to calculate output[i])

    for (i = 0; i < 16; i++)
    {
        printf("%02X ", output[i]); // output[i] is an array of 16-byte hex values
    }

    return 0;
}

Исходная программа (например, calc.c) запускается из командной строки:

./calculate $(echo "this_is_input"|xxd -p)

Теперь я хочу изменить main () только как функцию вызова, например, с именем run (). И написать новую функцию main () для вызова функции run ().

Ввод ( эквивалент вышеупомянутой командной строки ) жестко закодирован в новом main (). Функция main () передаст входное значение функции run () (вместо использования вышеуказанной командной строки).

run(int argc, char *argv[])
{
    ....
    return output[i];
}

затем run () возвращает тот же вывод [i] в ​​main ()

int main()
{
    input_char = **equivalent to $(echo "this_is_input"|xxd -p)** // how to define?

    unsigned char returned_output[16] = {0x00};

    returned_output = run(X, input_char);

    print(returned_output);
}

Вопрос:

  1. Как представить значение шестнадцатеричного дампа $ (echo "this_is_input" | xxd -p) ** в main ()?

  2. Как изменить run () и main () для возврата массива char без знака в main ()?

1 Ответ

3 голосов
/ 25 июня 2019
  1. Как представить значение шестнадцатеричного дампа $ (echo "this_is_input" | xxd -p) ** в main ()?

Вы можетепредставьте его как массив символов или, например, массив массивов символов - разбитых на пробелы.Последним является представление, что аргументы командной строки уже находятся в argv.

Как изменить run () и main () для возврата массива char без знака в main ()?

Вы должны объявить тип возвращаемого значения функции.Невозможно вернуть массив непосредственно в C, и нежелательно копировать массивы вокруг.Типичное решение - позволить вызывающей (основной) создать массив и позволить вызываемой функции изменить содержимое массива:

void run(int argc, char *argv[], unsigned char output[16])

main имеет проблему.Он пытается назначить массив.Массивы не присваиваются.Учитывая, что массивы также не могут быть возвращены из функций, это не имеет особого смысла.

Вот как я вызывал run, который я предложил:

unsigned char output[16] = {0x00};
run(argc, argv, output);
...