gpt4 book ai didi

c - Linux shell 脚本错误

转载 作者:行者123 更新时间:2023-11-30 18:59:14 24 4
gpt4 key购买 nike

我必须创建这个脚本,它将“PATH”中的每个路径与脚本的每个参数结合起来,并为每个参数执行“ls -l”命令......这就是我的想象,但我有一些问题它并且不知道到底是什么问题......我得到“分段故障(核心转储)”,如果不是,那么无论我给出多少个参数,输出都是相同的,所以我认为它只执行命令其中之一,但我不确定......有人可以帮助我吗? ...抱歉,如果我的英语很粗糙或者代码中是外语...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


int main (int argc,char* argv[])
{
char* s=(char*)malloc(sizeof(char)*strlen(getenv("PATH")));
s=getenv("PATH");
if (argc==0) {printf("Nem irt be egyetlen parametert sem!");}
else
{
char* seged=(char*)malloc(sizeof(char)*(strlen(strtok(s,":"))+1));
seged=strtok(NULL,":");
strcat(seged,"/");
int i=1;
for (i=1;i<=argc;i++);
{

char* seged2=(char*)malloc(sizeof(char)*(1000));
//char* seged2=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+(strlen(argv[i]))+1)); if i use this line i get Segmentation Fault
strcat(seged2,seged);
strcat(seged2,argv[i]);
int pid=fork();
if (pid==0)
{
execl("/bin/ls","ls -l",seged2);
}
free(seged2);
}
while (strtok(NULL,":")!=NULL)
{
free(seged);
char* seged=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+1));
seged=strtok(NULL,":");
strcat(seged,"/");
for (i=1;i<argc;i++);
{
char* seged2=(char*)malloc(sizeof(char)*(strlen(strtok(NULL,":"))+strlen(argv[i])+1));
strcat(seged2,seged);
strcat(seged2,argv[i]);
pid_t pid=fork();
if (pid==0)
{
execl("/bin/ls","ls -l",seged2);
}
free(seged2);
}
}

}

}

最佳答案

您必须测试strtok()的返回值。当您的 PATH 中不再有标记时,strtok() 返回 NULL 并且 strlen(NULL) 给出你的段错误。

请阅读man strtok

我建议您不要以这种方式嵌套函数调用,因为您总是有可能获得意外的返回值。

关于c - Linux shell 脚本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011371/

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