2012-01-02 4 views
1

GCC 별도의 요소로 문자열을 구문 분석.

이것은 문자열입니다

"v=0\no=sjphone 853596844 1765236571 IN IP4 10.10.10.10\ns=-\nc=IN IP4 10.10.10.10\nt=0 0\nm=audio 19112 RTP/AVP 8\na=rtpmap:8 PCMA/8000\na=ptime:20\n" 

내가 이런 식으로 분리하려면 :

v=0 
o=sjphone 853596844 1765236571 IN IP4 10.10.10.10 
s=- 
c=IN IP4 10.10.10.10 
t=0 0 
m=audio 19112 RTP/AVP 8 
a=rtpmap:8 PCMA/8000 
a=ptime:20 

이 내 코드입니다 : 어떤 제안에 대한

void parse_sdp_string(const char *sdp_string) 
{ 
#define MAX_NUM_ELEMENTS 16  
    char elements[MAX_NUM_ELEMENTS][MAX_STRING_LEN] = {{0}}; 
    apr_size_t element_count = 0; 
    apr_size_t i = 0; 
    apr_size_t k = 0; 

    char sdp_str[MAX_NUM_ELEMENTS * MAX_STRING_LEN] = {0}; 
    char *search_str = NULL; 

    /* Copy the string as to not corrupt the original */ 
    apr_cpystrn(sdp_str, sdp_string, sizeof sdp_str); 
    search_str = sdp_str; 

    /* Find the last carriage return to compare that we are at the last one */ 
    char *end_ptr = strrchr(search_str, '\n'); 

    /* Increment until you find a carriage return */ 
    while(*search_str != '\0') { 
     /* Fill the element in the array */ 
     elements[i][k++] = *search_str; 
     search_str++; 

     /* nul terminate and reset before starting copy next element */ 
     if(*search_str == '\n') { 
      elements[i][++k] = '\0'; 
      /* Next element */ 
      i++; 
      /* Set back to zero to copy from */ 
      k = 0; 

      /* Check that we are not at the last '\n' */ 
      if(search_str == end_ptr) { 
       /* This is the end, record the number of elements copied */ 
       element_count = i; 
       break; 
      } 

      /* skip over the current \n as we don't need to copy that */ 
      search_str++; 
     } 
    } 
} 

많은 감사합니다,

+0

은 #include 허용 # 입니까? –

답변

1

sscanf()을 사용하십시오. 전 = 25, X = 54.32E-1, 이름 = "햄스터"결과

int i, n; 
float x; 
char name[50]; 
n = sscanf("25 54.32E-1 Hamster", "%d%f%s", &i, &x, name); 

: 당신은 같은 일을 할 수 그것으로

.

4

나는 r은 strtok()입니다. 그것은 많은 코드를 저장합니다.

1

strtokstrstr과 같은 기능을 사용하면 훨씬 쉬워집니다. 실제로 "Searching"그룹에 속한 거의 모든 것이 string.h 일 수 있습니다.