c - D_FORTIFY_SOURCE 和 gcc

标签 c 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);

        }
}

它有效,但如果我将选项 D_FORTIFY_SOURCE 与 gcc 编译器一起使用,我会遇到段错误。如果我将 tt 的类型更改为:char tt[3],一切正常。为什么?

最佳答案

sprintf 正在放入一个空字符来终止字符串。所以你需要一个三字符数组来保存两个字符的字符串;它真的是 'a' 'b' '\0'。

关于c - D_FORTIFY_SOURCE 和 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695384/

相关文章:

c - 如何限制fifo的用户数量?

gcc - gcc 中的函数级链接

c - 如何在 gcc make 中链接静态库?

c - 32位和4GB内存有什么关系?

c - 如何在函数中使用 FMOD_SOUND?

c - 下面的 C 代码的输出是否因平台而异?

无法配置c编译器

c - 指向返回结构指针的函数的指针

linux - gcc 4.1 可以链接 gcc 4.6 构建的库吗?

c++ - 为什么我的 SFINAE 表达式不再适用于 GCC 8.2?