gpt4 book ai didi

c - 为什么当我调用方法时,execvp 失败?

转载 作者:行者123 更新时间:2023-11-30 16:01:00 25 4
gpt4 key购买 nike

如果您在代码中的任何位置调用 store_commands() 方法,则命令的执行会由于某种原因失败。

比如我的main方法

int main (int argc,  char * argv[]) {

char *command;

store_commands(); // problem


while ( (command = readline(" $ "))!= NULL ) { // scan stdin

rl_bind_key('\t',rl_complete);


splitCommands(&mainVars, command, argv);
}


return 0;
}

我的商店命令方法

void store_commands() {
char *newEnv;
DIR * dir;
char *new ;
struct dirent * entry;
char *env = getenv("PATH");
do {
newEnv = strsep(&env, ":");

if(newEnv != NULL)
if(strlen(newEnv) > 0) {

dir = opendir(newEnv);
if( dir == NULL ) break;
if(flag == 1) {
flag = 0;
while((entry = readdir(dir)) != NULL) {
new = malloc(strlen(entry->d_name) + 1) ;
new = strcpy(new, entry->d_name);

commands[++count] = new; // add possible commands into an array
//printf("---%i %s\n", count ,commands[count]);
}
}
closedir(dir); // close directory
}
} while(newEnv);

}

测试用例

without store_commands()

**ls**
comm[0]: 'ls' and comm[1]: '(null)' // command received here

Makefile
main.c
target
libedit.2.dylib

with store_commands()

**ls**
comm[0]: 'ls' and comm[1]: '(null)' // command received here again but....
Execution of the command is failed
: No such file or directory

最佳答案

您正在使用 strsep 破坏环境。在您的 env 上调用 strdup

一个最小的例子:

#include <stdlib.h>

int main ()
{
char* z = getenv("PATH"); // <---- z points to the actual env, not a copy
*z = 0; // <---- corrupt the environment
system("ls"); // <---- fail
}

关于c - 为什么当我调用方法时,execvp 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com