首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将char*转换为unsigned char*

将char*转换为unsigned char*
EN

Stack Overflow用户
提问于 2011-08-04 19:00:31
回答 4查看 46.3K关注 0票数 21

如何在C中正确地将char*复制到无符号char*。以下是我的代码

int main(int argc, char **argv)
{
    unsigned char *digest;

    digest = malloc(20 * sizeof(unsigned char));
    strncpy(digest, argv[2], 20);
    return 0;
}

我想正确地将char*数组复制到无符号char*数组。我使用上面的代码得到以下警告

warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness 

编辑:添加更多信息,我的要求是调用者在命令行上将SHA摘要作为字符串提供给main函数,main函数在内部将其保存在摘要中。使用无符号字符可以最好地表示SHA摘要。

现在的问题是我不能更改main函数(** char)的签名,因为main函数需要将其他参数解析为char*而不是unsigned char*。

EN

回答 4

Stack Overflow用户

发布于 2011-08-04 19:15:35

strncpy()调用中抛开感叹

strncpy((char*)digest, argv[2], 20);

或者引入另一个变量

#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    unsigned char *digest;
    void *tmp;                   /* (void*) is compatible with both (char*) and (unsigned char*) */

    digest = malloc(20 * sizeof *digest);
    if (digest) {
        tmp = digest;
        if (argc > 2) strncpy(tmp, argv[2], 20);
        free(digest);
    } else {
        fprintf(stderr, "No memory.\n");
    }
    return 0;
}

还要注意,malloc(20 * sizeof(unsigned char*))可能不是您想要的。我认为你想要malloc(20 * sizeof(unsigned char)),或者,根据定义,sizeof (unsigned char)1malloc(20)。如果您真的想在调用中使用每个元素的大小,请使用对象本身,就像我上面的代码一样。

票数 2
EN

Stack Overflow用户

发布于 2011-08-04 19:21:03

您可以像这样使用memcpy:

memcpy(digest, argv[2], strlen(argv[2]) + 1);

因为src和dest指针所指向的对象的底层类型与此函数无关。

票数 1
EN

Stack Overflow用户

发布于 2018-06-09 08:50:00

只需将(char*)放在它前面或(unsigned char*)

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

https://stackoverflow.com/questions/6940214

复制
相关文章

相似问题

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