Почему пространство не выделяется перед присваиванием для переменных-указателей, в которых хранятся аргументы main, которые должны использоваться в программе? - PullRequest
3 голосов
/ 02 апреля 2019

Я пишу программу на C, которая требует от меня принимать аргументы командной строки и использовать их в программе.Я не понимаю, почему в коде строковые аргументы присваиваются переменной char* для дальнейшего использования в программе, когда память не выделяется перед этим.Разве не обязательно выделять достаточно памяти, чтобы указатель мог указывать перед использованием?

//c program

int main(int argc, char *argv[]){

    //lets say there is only one argument after the program name 
    // so that argc = 2 and argv = {filename, string1}

    //assigning the string to a char *
    //no memory allocated before assignment
    char *x = argv[1];

    // rest of the program ...
}

1 Ответ

5 голосов
/ 02 апреля 2019

Каждый элемент в argv уже указывает на такое выделенное пространство, которое было создано некоторой поддержкой времени выполнения C для хранения аргументов командной строки. Поэтому вы можете безопасно указывать на эти предварительно выделенные буферы с помощью указателей.

Обратите внимание, что это также означает, что вы также не должны пытаться освободить их: любой, кто их создал, будет нести ответственность за их правильное уничтожение.

...