2014-11-17 3 views
1

여기 내 코드입니다 :잘못된 주소 C (명령 줄 인터프리터)

/* 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"); 
    } 
    } 
} 

때마다 I 입력 (예를 들어)/빈/LS, 나는 오류 진술을 얻을 "잘못된 주소". 나는 cmd와 args를 검사하여 올바른 값을 받았는지 확인했다.

+3

int argc 및 문자이다 'envp는 []'주'로 첫 번째 인수가()'결코 없다. 그것은'int argc'와'char ** argv'에 따라야합니다. –

+0

폴 감사합니다. 그러나 이것은 내 문제를 해결하지 못합니다. –

+0

그리고'execve'에 대한'args' 매개 변수는 단일 문자열이 아닌'char *'('argv' 등)의 배열이어야합니다. 마지막 항목은 'NULL'이어야합니다. –

답변

1

확인 아래 링크 : main()에 대한 Arguments to main in C

매개 변수는 *argv[]

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

또한 http://stackoverflow.com/questions/10321435/is-char-envp-as-a-third-argument-to-main-portable. – Evert