将char*转换为unsigned char*

Raj*_*jiv 18 c unsigned sha1 char strcpy

如何在C中正确地将char*复制到unsigned char*.以下是我的代码

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

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

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

warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness 
Run Code Online (Sandbox Code Playgroud)

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

现在的问题是我无法更改main函数(**char)的签名,因为main函数解析了它需要的其他参数作为char*而不是unsigned char*.

Oli*_*rth 11

要避免编译器警告,您只需要:

strncpy((char *)digest, argv[2], 20);
Run Code Online (Sandbox Code Playgroud)

但是避免编译器警告往往不是一个好主意; 它告诉你,存在根本的不兼容性.在这种情况下,不兼容性char的范围为-128到+127(通常),而unsigned char0到+255.


Pet*_*lin 5

您无法正确复制它,因为类型有所不同,编译器会警告您.

如果你需要复制argv[2]数组的原始位,你应该使用memcpy函数.