更新:此处是否讨论char,已签名的char或未签名的要点。在这种情况下使用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;
 }
}

最佳答案

显然,在您的编译器中,charsigned char,因此是警告消息。

关于c - 使用strncat进行字符串连接会导致签名错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3155904/

10-09 07:58