更新:无论是char,signed char还是unsigned最终都归于此。在这种情况下使用memcpy更合适,因为它在字节上不加选择地工作。
不可能是一个更简单的操作,但我似乎错过了一个关键步骤。在以下代码中,我尝试使用bufferdata
填充buffer
,编译器会警告我签名的差异。
unsigned char buffer[4096] = {0};
char *bufferdata;
bufferdata = (char*)malloc(4096 * sizeof(bufferdata));
if (! bufferdata)
return false;
while( ... )
{
// nextBlock( voidp _buffer, unsigned _length );
read=nextBlock( buffer, 4096);
if( read > 0 )
{
bufferdata = strncat(bufferdata, buffer, read); // (help)
// leads to: pointer targets in passing argument 2 of strncat differ in signedness.
if(read == 4096) {
// let's go for another chunk
bufferdata = (char*)realloc(bufferdata, ( strlen(bufferdata) + (4096 * sizeof(bufferdata)) ) );
if (! bufferdata) {
printf("failed to realloc\n");
return false;
}
}
}
else if( read<0 )
{
printf("error.\n");
break;
}
else {
printf("done.\n");
break;
}
}
答案 0 :(得分:1)
显然,在您的编译器中char
是signed char
,因此是警告消息。
答案 1 :(得分:1)
char * strncat ( char * destination, char * source, size_t num );
因此您的目标缓冲区是unsigned char,因此会出现符号警告。如果不需要signed,您可以将缓冲区更改为char数组,否则可以使用编译器中的-w选项忽略警告。