更新: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