I've got an array of char* with serial data that I'm trying to remove ':' from. I have tried to iterate through the char*, find and remove any colons but it just comes out as garbage.
char* espData[15];
// pull data from serial and tokenize with strtok > feed to espData
for(int x = 0; x < index-1; x++){
size_t nullTerm = strlen(espData[x]);
espData[x][nullTerm - 1] = '0円';
char* output
for(size_t i = 0; i < strlen(espData[x]); ++i){
if(espData[x][i] != ':') output += espData[x][i];
}
espData[x] = output;
Serial.println(espData[x]);
}
Moving the null character works fine (I wanted to get rid of the last character in every string). Most of the answers I found for general C++ used std::string which we don't have access to.
1 Answer 1
You've assumed that a char *
is some kind of string object, since you've got the following line of code: output += espData[x][i];
, and then later espData[x] = output;
It quite simply doesn't work like that. At best you can point output
inside espData[x]
and then do some other logic: but your attempt to "accumulate" the correct characters is incorrect.
Please consider the following code instead:
char* espData[15];
for(int x = 0; x < index-1; x++){
size_t nullTerm = strlen(espData[x]); // Get current length
char* output = espData[x]; // Start of string
for (size_t i = 0; i < nullTerm; ++i){
if(espData[x][i] != ':') { // If it's NOT a colon
*output++ = espData[x][i]; // Copy character 'up'
} // if
// If it WAS a colon, then
// output does NOT get incremented
} // for
*output = '0円'; // End string off with NUL
Serial.println(espData[x]);
} // for
-
That works perfectly, thank you! I have never been great with pointersTri42– Tri422016年06月15日 22:05:14 +00:00Commented Jun 15, 2016 at 22:05
-
@Tri42 I just finished a pointer-post on another question. Take a look: arduino.stackexchange.com/a/25317/22924John Burger– John Burger2016年06月16日 03:17:27 +00:00Commented Jun 16, 2016 at 3:17
char*
does nothing to its contents.tokenize with strtok
suggests your code uses strtok, which would be one (probably bloated) solution - yet your code doesn't use strtok!!?espData[x][nullTerm - 1] = '0円';
is redundant codenullTerm
is0
!