更新: char、signed char、または unsigned のいずれが最終的にここで問題になるかという点。memcpy はバイトに対して無差別に動作するため、この状況では 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;
}
}