首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >execv函数调用的无效参数

execv函数调用的无效参数
EN

Stack Overflow用户
提问于 2015-04-05 20:28:16
回答 1查看 1.2K关注 0票数 0

一个程序应该做什么的例子:

代码语言:javascript
复制
./executable ls -l

做同样的事

代码语言:javascript
复制
ls -l

因此,基本上它是shell命令的无用解释器。

我创建了一个包含fullpath的字符串arguments和一个二维数组arguments,它基本上是argv,但没有前两个条目(即executablecommandname)。

对于./executable ls -l示例,它实际上返回以下内容:

代码语言:javascript
复制
full path: /bin/ls
Argument 0: -l

这是正确的,但是execv实际上什么也不做。

我该怎么解决这个问题?

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

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

    char path[6] = "/bin/";
    char* fullpath = (char*)malloc(strlen(path)+strlen(argv[1]));
    strcat(fullpath, path);
    strcat(fullpath, argv[1]);
    printf("full path: %s\n", fullpath);

    char *arguments[argc-1];
    int i;
    for(i=0; i<argc-2; i++){
        arguments[i] = (char*)malloc(strlen(argv[i+2]));
        strcpy(arguments[i], argv[i+2]);
        printf("Argument %d: %s\n", i, argv[i+2]);
    }

    execv("/bin/ls", arguments);

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-05 20:38:22

当我们修改以下行时,您的程序看起来很实用:

代码语言:javascript
复制
char *arguments[argc-1];

您的char **参数必须如下所示:

char *arguments[] = { "/bin/ls", "-l", NULL };

换句话说,不要忘记先指出命令,并确保在char **末尾放空。

祝你好运!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29461881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档