错误地址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
函数显示更新的代码。但也可以。