2012-02-23 4 views
0

strtok 함수에 문제가 있습니다. 나는 '버스 오류'가 계속 발생합니다. 한 줄 안에 모든 단어를 반환하는 함수를 작성했습니다. 누군가 제 실수를 지적 해 주실 수 있습니까?C 프로그래밍 strtok

참고 : 나는 사전에 높은 수준의 언어

void extract_words(char tokens[WORD_MAX][WORD_LEN], char* line, int* sizePtr) 
{ 
    printf("in extract words"); //for debugging 

    char* chPtr = NULL; 
    chPtr = strtok(line, " "); 

    int size = 1;        //words has one element 
    while(chPtr != NULL) 
    { 
    strcpy(tokens[size++], chPtr); 
    chPtr = strtok(NULL, " ");    //continue to tokenize the string 
    } 
    *sizePtr = size; 
} 

덕분에 익숙해!

+0

전화를 걸 때 유효한 주소를 'sizePtr'에 입력하지 않은 것 같습니다. –

+0

sizePtr을 사용하는 방법은 다음과 같습니다. int size; int * sizePtr = &size; – CodeKingPlusPlus

+1

아마도 문자열 매개 변수로 문자열 리터럴을 전달하려고 했습니까? –

답변

1

strtok는 전달한 문자열을 수정하므로 문자열 리터럴이 될 수 없습니다. 당신이 뭔가를 할 수 있어야한다 : 배열 인덱스는 0에서 시작하기 때문에 나는 또한, 제로로 크기를 초기화

void extract_words(char tokens[WORD_MAX][WORD_LEN], const char* line_arg, int* sizePtr) 
{ 
    char line[(WORD_LEN+1)*WORD_MAX]; 
    char* chPtr = NULL; 
    int size = 0; 

    strcpy(line,line_arg); 
    printf("in extract words"); //for debugging 


    chPtr = strtok(line, " "); 

    while(chPtr != NULL) 
    { 
    strcpy(tokens[size++], chPtr); 
    chPtr = strtok(NULL, " ");    //continue to tokenize the string 
    } 
    *sizePtr = size; 
} 

참고.

0

음 ...

구분 기호를 사용해야합니까?

그 경우 소스 코드가 있습니다.

분할하여

int split(char *src, char *div, char **result,int *size) 
{ 
    int i, j, slen, dlen, key=0, start=0; 
    slen=strlen(src); 
    dlen=strlen(div); 
    for(i=0;i<slen;i++) 
    { 
     for(j=0;j<dlen;j++) 
     { 
      if(src[i]==div[j]) 
      { 
       src[i]=0x00; 
       result[key] = src+start; 
       key++; 
       start=i+1; 
      } 
     } 
    } 
    result[key]=src+start; 
    *size=key+1; 
    return 0; 
} 

(chatData "을"cmpData, & 톡);

""& 토큰 톡 : 한국어 Dalsam에 의해

원래 데이터 : 분할 단어를 chatData을 계산합니다.