C字符串插值

Eim*_*tas 5 c string

我正在用C构建简单的http状态检查器.我已经完成了网络部分,但是我遇到了字符串操作问题.它是如何工作的:

$ ./client http://domain.com/path.html#anchor
200
Run Code Online (Sandbox Code Playgroud)

该实用程序只是在命令行上输出给定页面的状态.我需要将给定的字符串解析为hostname和request path.我还用这个定义构建了一个"模板"字符串:

#define HTTP_GET_MSG "GET %s HTTP/1.1\nUser-Agent: my-agent-0.01\nHost: %s\n\n"
Run Code Online (Sandbox Code Playgroud)

我想知道如何将解析后的url(主机和路径)插入到定义的字符串中,然后send()才能将其插入套接字?

小智 7

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

char req[ SOME_SUITABLE_SIZE ];
sprintf( req, HTTP_GET_MSG, host, path );
Run Code Online (Sandbox Code Playgroud)

但是,除非事先检查"主机"和"路径"的长度,否则这将有可能缓冲超出.如果您的系统有snprintf,您可以避免这种情况:

snprintf( req, SOME_SUITABLE_SIZE, HTTP_GET_MSG, host, path );
Run Code Online (Sandbox Code Playgroud)