C字符串插值

5

我正在使用C语言构建简单的HTTP状态检查器。网络部分已经完成,但是我在字符串操作方面遇到了问题。以下是它的工作原理:

$ ./client http://domain.com/path.html#anchor
200

这个实用工具可以在命令行上输出给定页面的状态。我需要将给定的字符串解析成主机名和请求路径。我还使用了以下定义构建了一个“模板”字符串:
#define HTTP_GET_MSG "GET %s HTTP/1.1\nUser-Agent: my-agent-0.01\nHost: %s\n\n"

我想知道在将解析后的url(主机和路径)插入到此定义的字符串中并将其发送到套接字之前,应该如何进行插值处理?

8
你应该知道,在HTTP协议中,行的结尾不仅仅是\n,还包括\r\n - You
1个回答

8

一个简单的方法是使用sprintf:

char req[ SOME_SUITABLE_SIZE ];
sprintf( req, HTTP_GET_MSG, host, path );

但是,如果您没有提前检查“主机”和“路径”的长度,这将容易受到缓冲区溢出的攻击。 如果您的系统有snprintf,则可以避免此问题:

snprintf( req, SOME_SUITABLE_SIZE, HTTP_GET_MSG, host, path );

这个会起作用。我只需要事先计算总的“req”大小。谢谢! - Eimantas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接