2013-04-16 8 views
2

널로 끝나고 정적 널 종료 배열을 포함하는 정적 배열을 초기화하고 싶습니다. 나중에 모든 내용을 인쇄 할 수 있기를 바랍니다.정적 다차원 널 종료 배열 초기화

void print_commands(char *commands[][]) 
{ 
    int i, j; 
    char *command[]; 

    for(i = 0; commands[][i] != NULL; i++) 
    { 
     command = commands[][i]; 
     printf("Command #%d: %s\n", i, command[0]); 
     for(j = 1; command[j] != NULL; j++) 
     { 
      printf("Argument #%d: %s\n", j, command[j]); 
     } 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    char *commands[][5] = { 
     {"less", 0}, 
     {"sort", 0}, 
     {"cat", "my.txt", 0}, 
     {"echo", "hello", 0}, 
     NULL}; 

    print_commands(commands); 

    exit(0); 
} 

가 어떻게에 대해 제대로 초기화하는 데이터의 종류를 사용하여 갈 것입니다 :

여기 내가있어 코드가 지금까지 분명히 초기화 및 데이터 유형이 올바르지 않은입니까?

감사합니다.

답변

1
void print_commands(char **commands[]) 
{ 
    int i, j; 
    char **command; 

    for(i = 0; commands[i] != NULL; i++) 
    { 
     command = commands[i]; 
     printf("Command #%d: %s\n", i, command[0]); 
     for(j = 1; command[j] != NULL; j++) 
     { 
      printf("Argument #%d: %s\n", j, command[j]); 
     } 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    char **commands[] = { 
     (char*[]){"less", 0}, 
     (char*[]){"sort", 0}, 
     (char*[]){"cat", "my.txt", 0}, 
     (char*[]){"echo", "hello", 0}, 
     NULL}; 

    print_commands(commands); 

    exit(0); 
} 

또는

void print_commands(char *commands[][5]) 
{ 
    int i, j; 
    char **command; 

    for(i = 0; *commands[i] != NULL; i++) 
    { 
     command = commands[i]; 
     printf("Command #%d: %s\n", i, command[0]); 
     for(j = 1; command[j] != NULL; j++) 
     { 
      printf("Argument #%d: %s\n", j, command[j]); 
     } 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    char *commands[][5] = { 
     {"less", 0}, 
     {"sort", 0}, 
     {"cat", "my.txt", 0}, 
     {"echo", "hello", 0}, 
     { NULL } 
    }; 

    print_commands(commands); 

    exit(0); 
} 
더 읽기 및 복합 리터럴에 대한 포인터에 대한 포인터의 배열보다 혼란 이후 두 번째 버전으로 갈 것
+0

. 또한, int i ... for (i = 0은 OP가 C90을 사용하고 복합 리터럴이 작동하지 않을 것이라고 제안합니다.) – Lundin

+0

첫 번째 버전에서는 c99 컴파일러를 사용합니다 (예 : VC10) – BLUEPIXY

2

배열이 포인터가 아니므로 NULL으로 배열을 초기화 할 수 없습니다. 의 공통적이고 관용적 인 원리를 선택하지 않는 이유는 무엇입니까?

char *commands[][5] = { 
    { "less", NULL }, 
    { "sort", NULL }, 
    { "cat", "my.txt", NULL }, 
    { "echo", "hello", NULL }, 
    { NULL } 
};