現在、シェルをコーディングしていますが、何らかの理由で printenv 関数を動作させることができません。コマンドが与えられていないときは動作します。2 つの引数が与えられた場合も機能します。ただし、1 つの引数が指定された場合は機能せず、何も出力されません。
コードは次のとおりです。
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]);
}
}