鉴于:
char test[] = "bla-bla-bla";
Run Code Online (Sandbox Code Playgroud)
哪两个更正确?
char *test1 = malloc(strlen(test));
strcpy(test1, test);
Run Code Online (Sandbox Code Playgroud)
要么
char *test1 = malloc(sizeof(test));
strcpy(test1, test);
Run Code Online (Sandbox Code Playgroud) 此函数用于生成md5hash:
out = malloc(32+1);
void md5sum( u_char *secret_data, int secret_len, char *in,char *out ) {
ngx_md5_t md5;
u_char hash[16];
ngx_md5_init(&md5);
ngx_md5_update(&md5, in, strlen(in));
ngx_md5_update(&md5, secret_data, secret_len);
ngx_md5_final(hash, &md5);
int ii;
for (ii = 0; ii &lqt; 16; ii++) {
char tt[2];
sprintf(tt, "%02x", hash[ii] );
strcat(out,tt);
}
}
Run Code Online (Sandbox Code Playgroud)
它工作,但如果我使用选项D_FORTIFY_SOURCE与gcc编译器,我得到一个分段错误.如果我将类型更改tt
为:char tt[3]
,一切正常.为什么?