【发布时间】:2018-10-10 06:04:54
【问题描述】:
我一直在试图弄清楚如何修改 char 指针数组,但无论我做什么,下面似乎都没有变化是我试图改变的三个数组,包括对我正在调用的函数的调用使用。
char*cm1[5];
char*cm2[5];
char*cm3[5];
setupCommands(&cm1,commands,file,0);
setupCommands(&cm2,commands,file,1);
setupCommands(&cm3,commands,file,2);
下面的代码是函数本身。我在想它可能涉及双指针,但如果我尝试 *cmd 来更改数组,我会遇到分段错误。
void setupCommands(char **cmd[], char* commands[],char file[],int index){
char str1[255];
strcpy(str1,commands[index]);
char newString [5][255];
int j = 0;
int ctr = 0;
int i;
//printf("str1 %s\n" ,str1);
for(i = 0; i <= strlen(str1); i++){
if(str1[i] == ' '|| str1[i] =='\0'){
newString[ctr][j] = '\0';
ctr++;//next row
j=0;// for next word, init index to 0
}else{
newString[ctr][j]=str1[i];
j++;
}
}
for(i = 0; i < ctr; i++){
//printf(" test2 %s \n", newString[i]);
cmd[i] = newString[i];
//printf(" test2 %d %s \n", i,cmd[i]);
}
//printf("index %d", i);
cmd[i]= file;
cmd[i + 1] = NULL;
//execvp(cmd[0],cmd);
//cmd
}
【问题讨论】:
-
这里有一个明显的问题:您只能在函数中创建具有自动存储持续时间(局部变量的默认值)的对象。一旦函数退出,这些对象就不再存在了。
-
有了这样的函数接口,实现必须使用
malloc()和朋友(调用者将负责使用free()进行清理) -
cmd[i] = newString[i];考虑newString[i]指向的内容。这是一个浅副本。 -
变量
ctr不得超过 4,但代码中没有任何内容可以强制执行该标准