007
23.01.2005, 19:44 Uhr
Pablo
Supertux (Operator)
|
Zitat von ~burgerking: |
vielleicht ne ahnung wodurch das zu stande kommt? sonst lass ich TmpArray ohne die ersten 3 zeichen ausgeben aber das wär ja unnötiger mehraufwand...
|
hab doch oben gesagt, um strcat zu benutzen, muss dein string 0-terminierend sein, d.h.
vor der while Schleife (und direkt nach malloc) setzen
Zitat von Oliver: |
Oder besser
C++: |
memset(zeile,0,sizeof(zeile));
|
|
nicht unbedingt besser! Denn wenn zeile nicht in der selben Funktion deklariert wurde oder kein Array ist (bsp: Pointer auf Speicher mit malloc reserviert) liefert sizeof nicht die gewünschte Werte. Betrachte folgenden Code
C++: |
#include <stdio.h>
void func(DATENTYP* x) { printf("In func(): sizeof(x) = %d\n", sizeof(x)); }
void func2(DATENTYP x[]) { printf("In func2(): sizeof(x) = %d\n", sizeof(x)); }
int main() {
DATENTYP x[20];
printf("Vor der Ausführung: sizeof(x) = %d\n", sizeof(x));
func(x); func2(x);
printf("Nach der Ausführung: sizeof(x) = %d\n", sizeof(x));
return 0; }
|
Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=int (Die Option -D bei gcc erzeugt ein Makro, d.h. -DDATENTYP=int ist dasselbe, als wäre im Code irgendwo #define DATENTYP int) dann bekomme ich folgende Ausgabe:
Code: |
Vor der Ausführung: sizeof(x) = 80 In func(): sizeof(x) = 4 In func2(): sizeof(x) = 4 Nach der Ausführung: sizeof(x) = 80
|
wie du siehst, sizeof hat etwas ganz anders zurückgegeben, als func und func2.
Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=char dann bekomme ich
Code: |
Vor der Ausführung: sizeof(x) = 20 In func(): sizeof(x) = 4 In func2(): sizeof(x) = 4 Nach der Ausführung: sizeof(x) = 20
|
Wenn ich so kompiliere: gcc -oa a.c -DDATENTYP=double dann bekomme ich
Code: |
Vor der Ausführung: sizeof(x) = 160 In func(): sizeof(x) = 4 In func2(): sizeof(x) = 4 Nach der Ausführung: sizeof(x) = 160
|
Wie du siehst, func und func2 liefern immer 4 zurück, die Anzahl der Bytes, die der Pointer braucht und nicht die Anzahl der Elemente, die das Array ursprünglich hat.
Und wie gesagt, wenn man eine ganze Textzeile löschen will, setzt man auf 0 nur das erste Zeichen, das reicht, denn das ist der Sinn der 0-terminierende Strings. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 23.01.2005 um 19:45 Uhr von Pablo editiert. |