неожиданное поведение - PullRequest
       25

неожиданное поведение

0 голосов
/ 29 ноября 2018

Когда я использую sscanf для URL http://www.website.com:30081/text.txt, следующим образом:

int parse_url(char *url, requesthdrs *hdrs, char 
              *uri, char *domain_name) {    

   int request_port;                                                                 
   int host_hdr_len;                                                                 
   char temp[MAXLINE];                                                               
   size_t uri_len = 1;                                                               

   /* case 1: request_port specified */                                              
   /* format: http://domain_name:request_port/... */  

   if(sscanf(url, "http://%s:%d%s", domain_name, 
             &request_port, uri) == 3) {         
     fprintf(stderr, "case1\n");                                                     
     host_hdr_len = build_hosthdr(hdrs->host, 
                                domain_name, request_port);            
   }   

Программа не может ввести случай 1, почему это так?

1 Ответ

0 голосов
/ 29 ноября 2018

%s читает до первого пробела или конца строки.Это не то, что вы хотите или нужно.Вместо этого используйте %[^:] (набор сканирования, который соответствует чему угодно, кроме двоеточия).

Остерегайтесь переполнения буфера.Вы не знаете, насколько большими могут быть струны.

...