char *input[2];
input[0] = cat /etc/passwd
input[1] = grep root
我正在尝试创建一个C字符串的二维数组,以便
char **dArray;
dArray[0][0] = cat
dArray[0][1] = /etc/passwd
dArray[0][2] = NULL // Append NULL to mark end
dArray[1][0] = grep
dArray[1][1] = root
dArray[1][2] = NULL // Append NULL to mark end
我们怎么做?
// My Code
char **p ;
char *_p[2];
_p[0] = cat /etc/passwd
_p[1] = grep root
p = malloc(2 * sizeof(char*));
for(i=0; i<2 ;i++){
p[i] = malloc(20 * sizeof(char));
}
strcpy(p[0],_p[0]);
strcpy(p[0],_p[0]);
printf("%s,%s",p[0][0],p[1]); // I except the output cat,grep root
答案 0 :(得分:2)
由于字符串已经是一维数组,因此您需要一个二维数组来存储与字符串本身无关的字符串组,并且在使用前应分配每个顶部元素。
类似的东西:
char ***dArray = malloc(sizeof(char**)*2);
dArray[0] = malloc(sizeof(char*)*3);
dArray[0][0] = "cat";
dArray[0][1] = "/etc/passwd";
dArray[0][2] = NULL;
dArray[1] = malloc(sizeof(char*)*3);
dArray[1][0] = "grep";
...
答案 1 :(得分:1)
你的问题就在这一行:
printf("%s,%s",p[0][0],p[1]);
p[0][0]
不是字符串/ char * - 你使用了%s,所以printf需要一个字符串。 p [0] [0]是一个char,是第一个数组中的第一个字符。
使用printf("%s,%s",p[0],p[1]);
另外,你已经将一个字符串复制到p [0]两次,p [1]中有垃圾。确保从_p [1]复制到p [1]。
答案 2 :(得分:0)
以下是不使用malloc
的版本。
#include <stdio.h>
const char *cmd1[] = { "cat", "/etc/passwd", NULL };
const char *cmd2[] = { "grep", "root", NULL };
const char **dArray[] = { cmd1, cmd2, NULL };
int main(void)
{
for (const char ***cmd = dArray; *cmd; cmd++) {
printf("command\n");
for (const char **arg = cmd[0]; *arg; arg++) {
printf(" argument %s\n", *arg);
}
}
return 0;
}