c - exec 错误地址,NULL addet

标签 c null fork exec

我尝试使用 execvp,它运行良好,但现在我偶然发现了声明参数的方法,现在我得到“错误地址”作为错误。 我遇到了很多相同的问题,问题是最后一个参数为 NULL。

我尝试了很多方法在末尾附加 NUll 但它不起作用。

char *args4exec[5];

 switch(argsi)
      {
        case 1:
          printf("case 1 arg\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-1]);
          args4exec[2] = NULL;
          break;
        case 2:
          printf("case 2 args\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-2]);strcpy(&args4exec[2],args[i-1]);
          strcpy(&args4exec[3], NULL);
          break;
      }
    }

    if (execvp( args4exec[0], args4exec) == -1 )
      perror("exec failed");

strcpy 和正常定义不起作用,有人可以帮助我吗? 我发布的代码不起作用,但它应该显示我尝试添加 NULL 的方式。

最佳答案

在将您的命令 或其他字符串复制到args4exec 之前,您应该为其分配内存:

char *args4exec[5];
char *command = "Hello";
args4exec[0] = malloc(sizeof(char) * strlen(command));

此外,您的 strcpy() 编译器应该对此发出警告。应该是这样的:

strcpy(args4exec[0], command);

如果你使用 gcc 编译 -Wall -Wextra -Werror

并且您应该检查您的 args[i - 2] 和其他参数以确保它们存储正确的值并且没有超出范围。

关于c - exec 错误地址,NULL addet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013278/

相关文章:

Perl:将打开的文件句柄传递给读取 STDIN 的程序

c - TCP 套接字缓冲区大小也应该是连接 MSS 的偶数倍

c - 开始程序有问题

c - 如何在 c x86 AT&T 内联汇编中访问和更改 char 数组

java - 如何改进 Guava Optional 的 mockito 默认行为?

java - 当 someObject 是字段范围变量时,为什么 Eclipse null 分析会忽略 null 检查语句 : if (someObject ! = null) {...}?

null - 删除 "NUL"字符

C: fork() - 子级和父级未按预期行事

c - 在多个端口上绑定(bind)/监听,pthreads 是正确的方法吗?

c - 用多个 fork 打印语句