2012-10-21 3 views
2

한 번에 문자열 (char *) 문자를 구문 분석하는 함수를 작성하려고하지만 어떤 이유로 세그먼트 오류가 발생합니다. . 사용자 입력을 읽으려고하고 프로그램 이름과 인수를 구문 분석하려고했지만 다소 불미스러운 점이 있습니다.C 문자열 함수 (콘솔을 통한 사용자 입력)를 C 문자열 함수로 구문 분석 - 세그먼트 화 오류

콘솔 :

>./mish 
>mish>ls 
>command start:ls 
>*tempCommand:l 
>bottom 
>Segmentation fault 

코드 :

strcpy(tempCommand, command); 

strcpy()로 분할 오류가 어딘가를 작성합니다 원인이라고 :

ParserData parseCommand(ParserData parserData, char* command) 
    { 
     char* tempCommand; 
     char* currToken = '\0'; 
     short firstSpace = 0; 

     printf("command start:%s \n", command); 

     strcpy(tempCommand, command); 

     while(*tempCommand) 
     { 
      printf("*tempCommand:%c \n", *tempCommand); 

      if((char)*tempCommand == ' ' && firstSpace == 0) 
      { 
       printf("currToken: %c \n", (char)*currToken); 
       strcpy(parserData.myChildProgramName,currToken); 
       printf("after:"); 
       currToken = '\0'; 
       firstSpace = 1; 
      } 
      else if((char)*tempCommand != ' ' && *tempCommand != '-') 
      { 
       //strcat(currToken, tempCommand); 
      } 

      printf("bottom\n"); 

      printf("currToken: %c \n", *currToken); 

      tempCommand++; 

     } 

     printf("out\n"); 
     parserData.myChildProgramArguments = currToken; 

     return parserData; 
    } 
+0

가능한 복제본 [문자열 복사 (strcpy)] (http://stackoverflow.com/questions/12996604/string-copystrcpy) –

답변

4

tempCommand이 때 unitialised char*입니다 해서는 안된다. strcpy()를 호출하기 전에 tempCommand에 대한 메모리를 할당 : 필요한 경우 더 이상

tempCommand = malloc(strlen(command) + 1); /* +1 for terminating null. */ 
if (tempCommand) 
{ 
    /* Use 'tempCommand' */ 
} 

free(tempCommand);해야합니다.

*curToken 또는 *tempCommand의 값을 char으로 유형을 변환 할 이유가 없습니다.

+0

왜 +1할까요? 널 문자? – Katianie

+0

@Katianie, 네, null입니다. – hmjd

+0

그리고 while을 올바르게 사용하고 있거나 여기에 if 문과 같은 것을 제안하고 있습니다. – Katianie

0

malloc을 사용하여 tempCommand 변수에 동적으로 메모리를 할당해야합니다. 같은

뭔가 :

tempCommand = malloc(sizeof(command)); 

이 트릭을 할해야합니다. 행운을 빕니다!

+2

이것은'sizeof (command)'가'sizeof (char *)'로 충분하지 않아 잘못되었습니다. – hmjd