argv에 관한 질문

조회수 576회

프로그램이 linked list를 이용해서 메모리상에 저장한 후 프로그램 종료시 그 정보를 data.dat로 저장하는 것인데 argv[0]에는 경로가 저장되고 argv[1]에 시작하면서 적은 옵션이 저장되는 것으로 알고있습니다. 그런데 실제로 실행시에 argc = 3으로 부여된 것을 확인할 수 있고 코드 내에서 argv[2]를 사용해야 합니다. 그래서 이 코드에서 argc = 3 어떻게 결정되었는지 궁금합니다. 그리고 argv[1]은 무엇을 저장하는지 궁금합니다.

 //linked_list.h
#ifndef LINKED_LIST_H
#define LINKED_LIST_H
struct Linked_list
{
    char Name[10];
    struct Linked_list *next;
};

typedef struct Linked_list Node;

int size;
#endif

//main.c
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"

#define FNUM 2

void registerNode();
void print();
void (*pFuncs[FNUM])()={registerNode, print};


Node* head;

int main(int argc, int** argv)
{
    int size = 0;
    int select = 0;
    Node* target = malloc(sizeof(Node));
    FILE *fp = fopen(argv[2],"wb");

    head = malloc(sizeof(Node));
    head->next = NULL;

    while(select != 3)
    {
        printf("1.Register\t 2.Print\t 3.Exit\nSelect number : ");
        scanf("%d", &select);
        if(select>0 && select<=FNUM)
            pFuncs[select-1]();
        else if(select != 3)
            printf("You choose wrong number\n");
    }

    while(target != NULL)
    {
        fwrite(target,sizeof(Node),1,fp);
        target = target->next;
    }

    fclose(fp);

    return 0;
}

void registerNode()
{
    Node* current = head;
    Node* tmp = malloc(sizeof(Node));

    for(int i = 0; i < size; i++)
    {
        current = current->next;
    }

    while(getchar() != '\n');//버퍼비우기
    printf("Name : ");
    gets(tmp->Name);
    printf("\n");

    current->next = tmp;
    tmp->next = NULL;
    size++;

    return; 
}

void print()
{
    Node *target_Node = head->next;

    while(target_Node != NULL)
        {
        printf("Name : %s\n", target_Node->Name);
                target_Node = target_Node->next;
        }

    printf("\n");

    return;
}

이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • int** argv를 char** argv(char* argv[])로 바꾸니 해결되었습니다. 왜 그런지는 잘 모르겠지만... 알 수 없는 사용자 2019.6.4 11:17

1 답변

    • argc 는 argument count 의 약자로, 프로그램을 실행하면서 넘겨준 옵션의 개수를 의미합니다.
    • argv 는 아마도 argument values 의 약자일 것 같네요. 프로그램을 실행하면서 넘겨준 옵션의 배열입니다.

    argv의 내용은 전부 옵션입니다.

    디버그 화면을 보니 이렇게 실행했다고 보면 될 것 같네요.

    /testing/main ./main data.dat
    ------------- ------ --------
       argv[0]    argv[1] argv[2]
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)