gcc 4.6.2 C89
我只是想知道这是否是解析字符串以从单个sdp字符串中获取单个元素的好方法。
这是字符串:
"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++;
}
}
}
非常感谢任何建议,