如何在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*。
发布于 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)
是1
,malloc(20)
。如果您真的想在调用中使用每个元素的大小,请使用对象本身,就像我上面的代码一样。
发布于 2011-08-04 19:21:03
您可以像这样使用memcpy:
memcpy(digest, argv[2], strlen(argv[2]) + 1);
因为src和dest指针所指向的对象的底层类型与此函数无关。
发布于 2018-06-09 08:50:00
只需将(char*)
放在它前面或(unsigned char*)
https://stackoverflow.com/questions/6940214
复制相似问题