2013-04-16 35 views
2

我想初始化一个静态数组,它以null结尾并包含静态的以NULL结尾的数组。我还希望能够在以后打印所有内容。初始化静态多维空终止数组

下面是我得到了到目前为止的代码,明显的初始化和数据类型是不正确

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 } 
};