: точка ли полукокс, подписанный полукокс, или без знака, в конечном счете спорной здесь. было бы более целесообразно использовать memcpy в этой ситуации, так как она работает без разбора по байтам.конкатенация с strncat приводит к ошибкам в знаковости обновления
Не может быть более простой операции, но, похоже, мне не хватает критического шага. В следующем коде я пытаюсь заполнить 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;
}
}
Вы действительно читаете строки? Если это так, «buffer» должен быть char. Если нет, вы не должны использовать strncat – nos
+1 для этого. они действительно не являются строками, если nuls безудержно. переключился на memcpy и проблема решена. – bitcruncher