c - ssscanf 意外行为
问题描述
当我在 url 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,为什么会这样?
解决方案
读取直到第%s
一个空格或字符串结尾。那不是你想要或需要的。请改用%[^:]
(匹配除冒号以外的任何内容的扫描集)。
小心缓冲区溢出。你不知道弦可以有多大。
推荐阅读
- javascript - 回调函数在javascript中不起作用
- exception - 在 Kotlin stdlib 中对常见 java.lang.*Exceptions 进行类型别名的目的是什么?
- mysql - SQL LIMIT 动态 N
- html - 输入类型的事件=数字
- c++ - 以前的代码似乎会影响以后函数调用的时间
- node.js - 错误 HTTPS 节点 JS_
- react-native - 如何居中反应原生 headerTitle *component*(不是字符串)
- java - xOr 解密将整个文本文件中的正确字母替换为错误字母
- asp.net - 将我的 Asp.net 应用程序发布到 Azure 时出错
- domain-driven-design - 从 DDD 的角度来看,我可以拥有非聚合根的存储库吗