错误地址C(命令行解释器)

错误地址C(命令行解释器),c,command-line,execve,C,Command Line,Execve,这是我的密码: /* myshell program */ #include<stdio.h> #include <string.h> #define MAX_LENGTH 40 #define TRUE 1 char cmd[MAX_LENGTH]; char args[MAX_LENGTH]; void prompt() { printf("%s", "Shell: "); scanf("%s", cmd); char *line = NULL;

这是我的密码:

/* myshell program */

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

#define MAX_LENGTH 40
#define TRUE 1

char cmd[MAX_LENGTH];
char args[MAX_LENGTH];

void prompt() {
  printf("%s", "Shell: ");
  scanf("%s", cmd);

  char *line = NULL;  
  size_t linecap = 0; 
  ssize_t linelen;  

  if ((linelen = getline(&line, &linecap, stdin)) > 0) {
    strcpy(args, line);
  }  
}


int main(char *envp[]) {
  while (TRUE) {
    prompt();
    if (fork() == 0) {
        execve(cmd, args, envp);
        perror("execv");
    }
  }
}
/*myshell程序*/
#包括
#包括
#定义最大长度40
#定义真1
char cmd[最大长度];
字符参数[最大长度];
void提示符(){
printf(“%s”,“Shell:”);
scanf(“%s”,cmd);
char*line=NULL;
尺寸\u t线帽=0;
塞泽特·莱宁;
如果((linelen=getline(&line,&linecap,stdin))>0){
strcpy(args,line);
}  
}
int main(字符*环境[]){
while(TRUE){
提示();
如果(fork()==0){
execve(cmd、args、envp);
perror(“execv”);
}
}
}
每当我输入(例如)/bin/ls时,就会出现一个错误,说明“地址不正确”。我已经检查了cmd和args,并确保它们收到正确的值。

检查以下链接:

main()
的参数是
int argc
和char
*argv[]

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

envp[]
永远不是
main()
的第一个参数。它应该跟在
int argc
char**argv
后面。谢谢Paul。但这并不能解决我的问题,
execve
args
参数应该是
char*
的数组(如
argv
等),而不是单个字符串。最后一个条目应为
NULL
。使用正确的
main
函数显示更新的代码。但也可以。