2011-08-09 5 views
0

strtok에서는 나에게도 오류가 발생하지만 g-> db_cmd는 char *입니다.이 문제와 관련하여 도움을받을 수있는 사람은 누구나 사전에 도움을 주셔서 감사합니다 . 문자열을 통해strtok crash 왜 그 괴롭히는 이유인지 모르겠다

short processCMD(i_gsd_ptr g, i_exit_cb_ptr i_exit_cb, char* i_cmd) 
{ 

    /*-------------------LOCAL VARIABLES-----------------*/ 
    struct local_stack_def 
    { 
    char delims[3]; 
    int x; 
    short cmd_match, error,len_eulm,range_eulm, imp_eulm, sub_cmd_match; 
    short* cmd_len; 
    short* db_len; 
    char val_cmd[10]; 
    _cc_status cc; 
    char DataEntry[400]; 
    char msg_eulm[400]; 
    char* cmd; 
    char* db_cmd; 
    char space_const[2]; 
    char *result; 
    char del_const[2]; 
    }; 

    short pool_err; 
    struct local_stack_def *l; 

    #pragma nowarn (30) 
    l = POOL_GETSPACE_(i_exit_cb->Pool_addr,sizeof(struct local_stack_def),&pool_err); 
    #pragma warn 
    if (pool_err != 0) 
    { 
    exit(EXIT_FAILURE); 
    } 
    l->x = 1; 
    l->cmd_match=0; 
    *l->db_len = 0; 
    l->db_cmd = g->db_cmd; 
    l->imp_eulm= 1; 
    #pragma nowarn (207) 
    strncpy(l->del_const,"~",2); 
    #pragma warn 


    l->result = strtok(g->db_cmd,l->del_const); 
    strcpy(l->db_cmd,l->result); 
+0

g-> dn_cmd에 유효한 데이터 "this ~ string ~"이 포함되어 있습니다 – ken

+0

'#pragma nowarn' 지시문을 사용하여 어떤 경고를 표시하지 않습니까? – Praetorian

+0

''l-> del_const''가 유효한 포인터인지 확인 했습니까? –

답변

3

strtok 루프는 토큰 화와 '\0'으로 구분 문자를 대체합니다. 따라서 g->db_cmd이 읽기 ​​전용 문자열 리터럴을 가리키는 경우 strtok 호출이 중단됩니다.