Strings in C

Ozzy Ozborn

Erfahrenes Mitglied
Moin,

bevor ich anfange: ich bin echt kein Experte in C, und komme (wohl gerade deswegen) gerade nicht weiter. Hier also mein Problem:

Ich bekomme einzelne Zeichen gesendet, die ich zusammensetzen möchte, um sie am Ende wieder anders zu zerlegen. Eigentlich hatte ich mir das so gedacht:

char c; //empfangenes Zeichen
char *buffer;
buffer = malloc( 256 );

Und dann einfach das gelesene Zeichen dranhängen:
c = lesezeichen();
strcpy( buffer, c );

Aber wenn ich den Buffer am Ende ausgebe, ist er leer, also die zumindest die Ausgabe.

Wo ist da mein Fehler? Und meine zweite Frage: wie kann ich den buffer am Ende wieder leeren, um eine neue Zeichenfolge reinzuschreiben, ohne free und einem neuen malloc? buffer = '\0'?

MfG, und vielen Dank
 
Moin,

bevor ich anfange: ich bin echt kein Experte in C, und komme (wohl gerade deswegen) gerade nicht weiter. Hier also mein Problem:

Ich bekomme einzelne Zeichen gesendet, die ich zusammensetzen möchte, um sie am Ende wieder anders zu zerlegen. Eigentlich hatte ich mir das so gedacht:

char c; //empfangenes Zeichen
char *buffer;
buffer = malloc( 256 );

Und dann einfach das gelesene Zeichen dranhängen:
c = lesezeichen();
strcpy( buffer, c );

Aber wenn ich den Buffer am Ende ausgebe, ist er leer, also die zumindest die Ausgabe.

Wo ist da mein Fehler? Und meine zweite Frage: wie kann ich den buffer am Ende wieder leeren, um eine neue Zeichenfolge reinzuschreiben, ohne free und einem neuen malloc? buffer = '\0'?

MfG, und vielen Dank

Also strcpy ist falsch, damit kopierst du einen String, aber kein Zeichen.
Mach das dann direkt, ala array[index] = zeichen.
 
Hi,

aber wie mache ich dann aus den ersten Elementen wieder einen String, um ihn mit einem anderen zu vergleichen?

MfG, Ozzy
 
Hi,

aber wie mache ich dann aus den ersten Elementen wieder einen String, um ihn mit einem anderen zu vergleichen?

MfG, Ozzy

du kennst die funktion push_back zur stringmanipulation? damit kannst du ein Zeichen an das Ende des strings anhängen, also
deinstringname.push_back(deinecharvariable);
sollte ein Zeichen an den string anhängen.
um den buffer wieder zurückzusetzen würde ich sagen du nimmst memset.

memset, wmemsetSee Also
Buffer Manipulation Routines | _memccpy | memchr | memcmp | memcpy | _strnset | Run-Time Routines and .NET Framework Equivalents
Requirements
Routine Required header Compatibility
memset <memory.h> or <string.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP
wmemset <wchar.t> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP

For additional compatibility information, see Compatibility in the Introduction.

Libraries

All versions of the C run-time libraries.
Sets buffers to a specified character.

void *memset(
void *dest,
int c,
size_t count
);
wchar_t *wmemset(
wchar_t *dest,
wchar_t c,
size_t count
);
Parameters:
dest
//Pointer to destination.
c
//Character to set.
count
//Number of characters.
 
Wusste garnicht das in C der C++-Standard implementiert ist @random-access. Nachdenken dann schreiben!

@Topicersteller:
Weißt du wie viele Zeichen kommen? Wäre hilfreich ... sonst musst du das etwas komplizierter gestallten ;)
C++:
char* ptr_data = (char*)malloc(sizeof(char) * length + 1);
ptr_data[length] = 0;
Length ist die Anzahl der Zeichen die du erwartest. +1 für die Nullterminierung. (die auch direkt vorgenommen wird ...)

Dann merkst du dir in einem unsigned short das wie vielte Zeichen du gerade gelesen hast.
C++:
unsigned short char_id = 0;
ptr_data[char_id++] = lesezeichen();
... char_id ist das momentane Zeichen.

Um dann den String wieder zurückzusetzen mach eifnach:
C++:
ptr_data[0] = 0;
... dann liefern dir alle String-Funktionen ne Länge von 0 und damit nen lehren string ;)
 
Vielen vielen Dank, dann werde ich das mal ausprobieren Die Länge weiß ich zwar nicht genau, aber es werden keinesfalls mehr als 255 werden...

MfG, und vielen Dank noch einmal. Ozzy
 
Naja wenn du es nicht genau weißt, dann kannst du auch einfach einen Array auf dem Stack nehmen. (mit max. zeichenanzahl ...) Dadurch kannst du dir malloc, free usw. sparen.
 
Zurück