ssscanf意外行为

时间:2018-11-29 05:15:48

标签: c sockets io scanf

当我在网址http://www.website.com:30081/text.txt上使用sscanf时,如下所示:

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 :(得分:1)

%s读取直到第一个空格或字符串结尾。那不是您想要或需要的。使用%[^:](一种与冒号匹配的扫描集) 代替。

当心缓冲区溢出。你不知道弦可以有多大。