Я пытаюсь проанализировать и одновременно сохранить некоторые данные, используя strtok_r () из массива char, который передается в мою функцию.Извлечение первой переменной работает, как и ожидалось, когда я получаю вторую, я получаю только частичную часть, которая происходит между токеном и NULL-терминатором строки.Здесь я пытаюсь получить значение после 'to =', пароль после 'paw =' и число после 'tz ='.Первая и последняя работа, но я теряю токены по обе стороны от «лапы» и, похоже, не могу извлечь текст по другую сторону от «=».Меня каждый раз оставляют с NULL.
Это лучший способ проанализировать строку, подобную этой?У меня есть рабочая версия, использующая strtok (), но она использует так много переменных, потому что мне приходится каждый раз сохранять временную переменную, а затем запускать токены для каждой из них - это требует двух отдельных случаев, и я бы предпочел, чтобы все обрабатывалось внутриодин случай.Я также пытался использовать strchr (), но это также было очень громоздко и требовало много временных переменных.
Спасибо за любой совет, и я с нетерпением жду обсуждения!
Вот мой код ниже,компилируется (требуется string.h)
int main(int argc, char **argv){
char resp[] = "INCOMING,1,443:GET /send?to=12&paw=password&tz=3 HTTP/1.1";
char *arg;
char *p_arg;
char *temp;
char *p_temp;
printf("resp is: %s\n",resp); //full response
arg = strtok_r(resp, ",", &p_arg);
arg = strtok_r(NULL, ",", &p_arg);
printf("first num = %s\n", arg); //get the first number
strtok_r(NULL,"/", &p_arg); //discard the rest up until '/'
arg = strtok_r(NULL,"?", &p_arg);
printf("arg is now: %s\n", arg); //we got the first operator "test"
if(strncmp(arg, "send", 4) == 0){
while(arg){
if(strncmp(arg,"to",2) == 0){
printf("in to, arg is %s\n", arg);
temp = strtok_r(arg,"to", &p_temp);
temp = strtok_r(temp,"=", &p_temp); //get the number after 'to='
printf("to is %s\n", temp);
} else if(strncmp(arg,"paw",3) == 0){
printf("In paw, arg is %s\n",arg); //got the paw token
//now get the password after the '='
temp = strtok_r(arg,"paw", &p_temp);
temp = strtok_r(temp,"=", &p_temp);
printf("paw is %s\n", temp);
} else if(strncmp(arg,"tz",2) == 0){
printf("In tz, arg is %s\n",arg); //got the tz token
temp = strtok_r(arg,"tz=", &p_temp);
temp = strtok_r(temp," ", &p_temp); //extract tz value
printf("tz is %s\n", temp);
}
arg = strtok_r(NULL,"&", &p_arg);
} //while
} //if "test"
} //main