nginx的ngx_str_t

在nginx里的ngx_tr_t结构是字符串定义如下

typedef struct {
    size_t    len;
    u_char   *data;
}ngx_str_t;

在给这样的结构体赋值的时候,nginx常用ngx_string(),这其实是个宏,如下

#define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }

当要建一个ngx_str_t类型的字符串,正确的做法是ngx_str_t mystr = ngx_string("hello");

因为sizeof(str) - 1赋给len,sizeof()计算字符串长度会加上最后的\0,nginx也是这么认为的,所以一定要用\0结尾的字符串用ngx_string(str)给ngx_str_t赋值;

不要用一下方法

printf("%d\n",sizeof("hello"));//这一个会输出6,因为常量字符串以\0结尾
char a[5] = "hello";
ngx_str_t mystr = ngx_string(a);   //这样sizeof(a)=5, mystr.len=sizeof(a)-1就错了