Enzelne Zeichen aus char* löschen

T

TTS_SST

Hi zusammen

Ich habe ein Problem. Ich hoffe Ihr könnt mir helfen.

Ich habe eine Funktion "receiveData", die Daten über den ComPort ausliest.

Die Daten werden in einem "char* rxBuffer" gespeichert. Jedoch nach folgendem Muster:

"VDC; FIXED; RANGE 4; RATE M;\x0d\x0a => \x0d\x0a "

Gibt es eine Möglichkeit die ganzen \x0d\x0a rauszulöschen?


Mit der remove_erase Funktion bin ich nicht weitergekommen.
 
Hi,

laufe den char* bis zum \0 durch und kopiere alle Zeichen bis auf die obigen in einen neuen Buffer. Den Alten kannst du danach freigeben.

Gruß
BK
 
Von mir aus könntet ihr mir auch erklären, wie man die steuerzeichen \x0a und \x0d durch leerzeichen ersetzt. Ich hoffe ihr könnt mir helfen.

Danke
 
ersetzen:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void replace(char** buffer, char search, char replacement) {
  if(buffer == NULL || *buffer == NULL) return;
  char* str = *buffer;
  while(*str++ != '\0') {
    if(*str == search) *str = replacement;
  }
}
 
int main(int argc, const char** argv) {
  char* test = (char*) malloc(sizeof(char) * 13);
  strncpy(test, "Servus\x0a\x0dtest\0", 13); // 53 65 72 76 75 73 0a 0d 74 65 73 74 00

  replace(&test, '\x0a', ' ');
  replace(&test, '\x0d', ' ');
  puts(test);  // 53 65 72 76 75 73 20 20 74 65 73 74 00

  free(test);
  return 0;
}

// Edit: Getestet und funktioniert wie oben geschrieben.

Gruß
BK
 
Zuletzt bearbeitet:
Nun, es hat zwar funktioniert als ich dein Beispiel ausprobiert habe, jdeoch als ich es in mein Programm einbauen wollte kamen komische Fehlermeldungen:

CSerialPort.obj : error LNK2001: unresolved external symbol "public: void __thiscall CSerialPort::replace(char * *,char,char)" (?replace@CSerialPort@@QAEXPAPADDD@Z)
Debug/Fluke_45_Reader.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...

Was bedeuten die 2 Errors?
 
Das geht besser und vor allen Dingen standardkonform:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void replace(char* buffer, char search, char replacement) {
  if( !buffer ) return;
  while( buffer=strchr(buffer,search) ) *buffer++=replacement;
}

int main() {
  char test[]="Servus\r\ntest"; /* 53 65 72 76 75 73 0a 0d 74 65 73 74 00 */

  replace(test, '\r', ' ');
  replace(test, '\n', ' ');
  puts(test);  // 53 65 72 76 75 73 20 20 74 65 73 74 00

  return 0;
}

// Edit: Getestet und funktioniert wie oben geschrieben.

Gruß
BK
 
Zurück