首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看char *的内容,因为printf不能工作?

如何查看char *的内容,因为printf不能工作?
EN

Stack Overflow用户
提问于 2014-04-11 16:10:41
回答 1查看 166关注 0票数 1

下面是我的代码片段:

代码语言:javascript
复制
#include <stdio.h>
#include "uhash.h"
#include <openssl/evp.h>


char * hash(item  a)
{
    const char * str= a.k;
    int len= strlen(str);

    int md_len;
    unsigned char md_value[EVP_MAX_MD_SIZE];    /* Buff to store change result */
        EVP_MD_CTX *mdctx;              /* Digest data structure declaration */
        const EVP_MD *md;  
    OpenSSL_add_all_digests();
        md = EVP_get_digestbyname("SHA256");
        mdctx = EVP_MD_CTX_create();
        EVP_DigestInit_ex(mdctx, md, NULL);
        EVP_DigestUpdate(mdctx, str, len);
        EVP_DigestFinal_ex(mdctx, md_value, &md_len);
        EVP_MD_CTX_destroy(mdctx);

    char md5str[33];
    for(int i=0;i<md_len;++i)
    {
        sprintf(&md5str[i*2],"%02x",(unsigned int)md_value[i]);
    }
    printf("%s\n", md5str);
    return md5str;
}
int main(int argv, char **argc)
{
    char *c;
    if (argv>0)
    {
        int i=0;
        int s=0;
        for(i=1;i<argv;i++)
        {
            s+=strlen(argc[i]);
        }
        c=(char *)(malloc(sizeof(char)*s*(argv-2)+1));
        s=0;
        for(i=1;i<argv;i++)
        {
            char *t=c+s;
            memcpy(t,argc[i],strlen(argc[i]));
            if(i!=argv-1){
                    printf("%d\n", argv);
                    t[strlen(argc[i])]=' ';
                s++;
            }
            s+=strlen(argc[i]);
        }
        *(c+s)='\0';
    }
    printf("%s\n", c);
    item * kee= malloc(sizeof(item));
    kee->k=c;
    kee->v=10;
    char *res= hash(*kee);
    fflush(stdout);
    if(res==NULL)
        printf("result is null...");
    else
        printf("%s\n",res);
    fflush(stdout);
}

因此,main函数将参数接受得很好(已测试)并将其传递给它(测试),但是散列()函数虽然计算了散列,但要么不返回正确的值,要么我无法在main中打印结果。从昨天起,我就一直在检查错误,但是我不是很聪明,所以任何帮助都会受到极大的感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 16:58:32

根本原因:您正在返回在堆栈上创建的内容,一旦返回,它就会被删除。正指向你的堆栈。

Fix:将md5str声明置于例程哈希之外,或使其在例程哈希中保持静态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23017582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档