我正在编写一个shell,由于某些原因我无法使用我的printenv函数。如果没有给出命令,它就可以工作。当给出两个参数时,它也有效。但是,当给出一个参数时,它不起作用并且不打印任何内容。
代码如下:
else if (strcmp(args[0], "printenv")==0){
/* Previously: if (args[1] == NULL && args[0] != NULL){ */
if (argc == 1){
int i = 0;
while (envp[i] != NULL){
printf("%s\n", envp[i++]);
}
}
/* Previously: else if (args[2] == NULL && args[1] != NULL){ */
else if (argc == 2){
char *env;
while (args[1] = *argv++){
env = getenv(args[1]);
if (env != NULL){
printf("%s", env);
}
}
free(env);
}
else {
fprintf(stderr, "%s: Too many arguments\n", args[0]);
}
}
答案 0 :(得分:3)
else if (strcmp(args[0], "printenv")==0){
if (args[1] == NULL && args[0] != NULL){
我在这里停止阅读。 strcmp
调用已确定*args[0]=='p'
,为什么要将args[0]
与NULL进行比较?
现在,那已经解决了。我想你根本不需要这个循环:
while (args[1] = *argv++){
env = getenv(args[1]);
if (env != NULL){
printf("%s", env);
}
}
只是循环体:
env = getenv(args[1]);
if (env != NULL){
printf("%s", env);
}
正如@Jason评论的那样,你不应该释放(或以其他方式修改)getenv
返回的指针(也不是它指向的数据)。