understanding ngx_str_t structure

Roman Arutyunyan arut at nginx.com
Fri Sep 27 10:14:14 UTC 2019


On Fri, Sep 27, 2019 at 05:44:09AM -0400, astre wrote:
> Hi,
> I trying to print the requested URL path. For that I came across the "uri"
> member which is of type ngx_str_t) under ngx_http_request_t structure. When
> I print the "uri" using ngx_log_debug1 (ngx_log_debug1(NGX_LOG_DEBUG_HTTP,
> log, 0, "%s", r->uri.data)) I see some extra data printed. 
> For eg. when http://localhost/test is requested, "/test HTTP/1.1 Host" is
> printed. 
> In my understanding "uri.data" should have contained only "/test". The
> "uri.len" correctly shows the length as 5. The "data" member is unsigned
> char *data so while extracting the actual string do we need to consider the
> length in ngx_str_t ?

The %s format suggests that the string is null-terminated, which is not the
case for r->uri.data.  There's a special format %V for printing ngx_str_t:

  ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "%V", &r->uri);

For more information on ngx_str_t, see the dev guide:


> Posted at Nginx Forum: https://forum.nginx.org/read.php?2,285729,285729#msg-285729
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx

Roman Arutyunyan

More information about the nginx mailing list