更新:char,signed char或unsigned是否最终在这里进行讨论。在这种情况下使用memcpy更为合适,因为它在字节上不加区分地工作。与strncat字符串连接导致签名错误
不可能是一个更简单的操作,但我似乎错过了关键的一步。在下面的代码中,我试图用buffer
来填充bufferdata
,编译器提醒我注意签名的不同。
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;
}
}
你真的在看字符串吗?如果是这样,'缓冲'应该是字符。如果没有,你不应该使用strncat – nos 2010-07-01 07:52:57
+1。他们真的不是字符串,如果nuls猖獗。切换到memcpy并解决问题。 – bitcruncher 2010-07-03 15:32:39