小编LLL*_*LLL的帖子

85
推荐指数
5
解决办法
23万
查看次数

如何在调用strcpy之前分配数组?

鉴于:

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)

c string

7
推荐指数
2
解决办法
3万
查看次数

D_FORTIFY_SOURCE和gcc

此函数用于生成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],一切正常.为什么?

c gcc

3
推荐指数
1
解决办法
1905
查看次数

标签 统计

c ×3

gcc ×1

linux ×1

posix ×1

string ×1