2013-10-06 6 views
0

그래서 저는 쉘을 만들고 있고 구현중인 하나의 명령은 프롬프트입니다. 이것은 인수를하고 프롬프트로,하지만 인수가 그 다음 사용자 입력을 요청할 것를 입력하지 않으면 ..... 이들은 매우 몹시 그래서 여기에 표현 된 예제가 있다고 사용을 설정합니다 :사용자 입력을받을 때 오류가 발생 했습니까?

[SHELL] prompt code 
code[SHELL] ls 
code[SHELL] .... 

또는

[SHELL] prompt 
please enter a prefix: (user input goes here, say code again) 
code[SHELL] 

이제 첫 번째 상황은 사용자의 입력을 요청, 내가 인수없이 프롬프트하려고하지만 경우에, 잘 작동하지만 내가 그것을 입력 할 때, 그것은 오류를에 세그먼트와 그 이유를 모르겠어요.

내가 지금까지 가지고있는 코드 :

void prompt(char *target) 
{ 
    if(!target) 
    { 
     printf("Please enter a prefix: "); 
     scanf("%s", &target); 
    } 
    char *result = malloc(strlen(SHELL) + strlen(target) + 1); 
    strcpy(result, target); 
    strcat(result, SHELL); 
    SHELL = result; 
} 

어떤 아이디어? 어쩌면 그것은 단지 내 실수 일 뿐이지 만, 이것이 효과가있는 것처럼 보입니다.

내 코드에서 "쉘"은 "[MY_SHELL] :"인 char arrray의 매크로입니다.

답변

0

문제는이 문입니다 : 당신은 입력 문자열이 아닌 char *에 대한 포인터에 대한 버퍼에 대한 포인터를 전달해야

scanf("%s", &target); 

.

target = (char *)malloc(1000); 
scanf("%s", target); 

물론 사용자 입력이 1000자를 초과 할 수 있기 때문에 보안 코드가 아닙니다. 그러나 기본을 바로 잡아 봅시다.

+0

아, 감사합니다. 이것은 효과가 있었다. (나는 1000을 malloc에 ​​보관하지 않고 10으로 시도했다.) 그래도 작동했다. 그래서 고마워! – VakarianWrex

관련 문제