Hi there,

Say I have a payload:

1) unsigned char apayload[] = {'H','i',' ','T','h','e','r','e'};

And then I have another payload, which is the same as above but with an additional 2 characters:

2) unsigned char received_payload[]={'H','i',' ','T','h','e','r','e,'a','b''};

How would I go about making the second payload exactly the same as the first payload?

I basically want to null out array blocks [8] and [9] of the second payload so that the characters 'a' and 'b' are ignored basically no longer exist so it becomes a payload of size [8] like the first one.

I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

for (int i=8;i <10; i++)
received_payload = 0;

Thankyou!!

Recommended Answers

All 4 Replies

>>How would I go about making the second payload exactly the same as the first payload?
You can't without reallocating the entire string because the way the arrays are declared there is no room for expansion.

BTW: neither apayload nor received_payload are null-terminated strings. When you initialize character arrays like that using individual characters the array is nothing more than an array of characters, so you can't use string functions on them such as strlen() to get the number of characters.

>>I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

Yes, that only replaces the character with 0, it does not change the array size. You will have to reallocate the array if you want to make it smaller. But I don't think its worth the effort. Just put a 0 there and treat it like any other null-terminated string.

>>How would I go about making the second payload exactly the same as the first payload?
You can't without reallocating the entire string because the way the arrays are declared there is no room for expansion.

BTW: neither apayload nor received_payload are null-terminated strings. When you initialize character arrays like that using individual characters the array is nothing more than an array of characters, so you can't use string functions on them such as strlen() to get the number of characters.

>>I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

Yes, that only replaces the character with 0, it does not change the array size. You will have to reallocate the array if you want to make it smaller. But I don't think its worth the effort. Just put a 0 there and treat it like any other null-terminated string.

OK, cool, thanks for that.

If I wanted to do the same sort of thing with strings but then convert it using c_str() is there a way to add to the c_str() function to do this or would I have to re-allocate etc first before using c_str()?

Ie if I wanted to convert the first 8 characters of the string using c_str() but ignore the last 2 characters, can I instruct it to do this with c_str() or would I have to change the string to get rid of characters 9 and 10 before hand?

Hi

possibly you want that second array of chars behaves like first on, as in:

int main() {
  unsigned char apayload[] = {'H','i',' ','T','h','e','r','e', '\0'};
  unsigned char received_payload[]={'H','i',' ','T','h','e','r','e','a', 'b','\0'};
  cout << apayload << "  "<< received_payload << endl;
  received_payload[8]='\0';
  cout << apayload << "  " << received_payload << endl;
  return 0;
}
/* result
Hi There  Hi Thereab
Hi There  Hi There
*/

You may consider what I added to the initialization of both arrays. Also consider this solution will produce memory leaks.

krs,
tesu

OK, cool, thanks for that.

If I wanted to do the same sort of thing with strings but then convert it using c_str() is there a way to add to the c_str() function to do this or would I have to re-allocate etc first before using c_str()?

Ie if I wanted to convert the first 8 characters of the string using c_str() but ignore the last 2 characters, can I instruct it to do this with c_str() or would I have to change the string to get rid of characters 9 and 10 before hand?

I guess you are talking about std::string c++ class and not character arrays.

std::string = "Hello World";
// now cut off the last two characters of the string
string = string.substr(0, string.length()-2);
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.