send() function returns more bytes that it was required c++

后端 未结 4 966
灰色年华
灰色年华 2021-01-27 06:47

I am doing a socket program and, after my server is connected with the device, I am trying to send a message to him. But the send() function returns a number of bytes greater th

相关标签:
4条回答
  • 2021-01-27 06:52

    The type of HEX_bufferMessage is pointer to CHAR. You are using sizeof( HEX_bufferMessage ) that is equal to 8 in your paltform.

    0 讨论(0)
  • 2021-01-27 07:00

    You did not mean sizeof(HEX_bufferMessage). The type of HEX_bufferMessage is [presumably] char*, and the size of a char* is 8 bytes on your [64-bit] system.

    Pass the number 7 instead, preferably using a constant, and get rid of that dynamic allocation if the value 7 really is fixed.

    const int BUF_SIZE = 7;
    char HEX_bufferMessage[BUF_SIZE];
    
    // ...
    
    retorno = send(sckSloMo, &HEX_bufferMessage[0], BUF_SIZE, 0); 
    
    0 讨论(0)
  • 2021-01-27 07:10

    Assuming you've got

    TYPE* myPointer;

    then sizeof(myPointer) will give you the size of the pointer (i.e. 4 bytes on a 32 bit system, 8 on a 64 bit system), not the size of the array.

    You want to do

    const int bufferSize = 7;
    HEX_bufferMessage = new CHAR[bufferSize]; 
    
    ...
    
    retorno = send(sckSloMo, HEX_bufferMessage, sizeof(CHAR) * bufferSize, 0); 
    
    0 讨论(0)
  • 2021-01-27 07:13

    It seems you assume that sizeof(HEX_buffer_message) yields the number of elements in HEX_buffer_message. It doesn't. It produces the size of the type of HEX_buffer_message which seems to be a 64 bit pointer yielding 8 rather than 7. There is no way to determine the size of an array allocated with new T[n] from the returned pointer. You'll need to use the n passed somehow.

    0 讨论(0)
提交回复
热议问题