在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就错了