Sunday, October 26, 2014

Copying non null-terminated char array to String

Sometimes while listening to data on a network, the packet structure defined contains data members of type char[]. In most of the cases, the data in these char[] data members  will not be null terminated.

i.e.


structObj.charArray[8] = { 'p', 'a', 'r', 'a', 'g', ' ', ' ', ' ' };  
//see all 8 chars occupied, with no null termination at the end. 

 How do you read the object in your program. There are various ways, here's one:

#include <iostream>
#include <string>
#include <cassert>

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
#define MAX_INPUT_ARR_SIZE 5
int main()
{
    char input[MAX_INPUT_ARR_SIZE] = { 'p', 'a', 'r', 'a', 'g' };
    
    const std::string output( input, ARRAY_SIZE(input) );
    std::cout << output << std::endl;
    //To check on the size 
    assert(output.length() == MAX_INPUT_ARR_SIZE);
    return 0;

}

No comments:

Troubleshooting Packet Drops in SolarFlare Onload 10G PCI Card

If you see lots of packet drops in your onload accelerated application even after going the troubleshooting discussion we did over here ,...