problem beim schreiben von pointern die an funktion übergeben wurden
-
so, nun mach das doch mal vernuenftig!
char* remove_substring ( char* string, const char* substring );
maximal eine schleife, maximal ein if und maximal ummmm ... sagen wir mal zwei funktionsaufrufe aus der standard lib.
-
const char*delstr(char *q,const char *s) { char *p; while(p=strstr(q,s)) memmove(p,p+strlen(s),strlen(p+strlen(s)-1)); return q; } int main() { char s[]="blaxblafasel"; puts(delstr(s,"bla")); return 0; }
-
mcmorf! schrieb:
char buffer[BUFFERSIZE]={};
Leere Initialisierer sind in C nicht zulässig. Da Strukturen dort nie leer sein können und alle primitiven Typen durch 0 intitialisiserbar sind, kann man im Zweifel (dank barce-elision) immer eine 0 schreiben
char buffer[BUFFERSIZE]={0};
-
Wutz schrieb:
const char*delstr(char *q,const char *s) { char *p; while(p=strstr(q,s)) memmove(p,p+strlen(s),strlen(p+strlen(s)-1)); return q; } int main() { char s[]="blaxblafasel"; puts(delstr(s,"bla")); return 0; }
tststs
das teure memmove muss doch nun wirklich nicht sein.camper schrieb:
dank barce-elision
bitte was?
-
camper schrieb:
mcmorf! schrieb:
char buffer[BUFFERSIZE]={};
Leere Initialisierer(listen) bedeuten einen Syntaxfehler, worauf ein standardkonformer Compiler ebenso wie bei einer constraint violation irgendwie reagieren muss, z.B. mit einem Hinweis/Warnung/Fehler.
-
mcmorf benutzt anscheinend immer noch einen C++-Compiler für sein C.
-
Er meinte brace elision. Hat sich verschrieben.
Edit: Wutz, wenn es ein Fehler ist, dann kann das doch nicht in einer Warnung resultieren?
-
[quote="big bam bubie"]
Wutz schrieb:
const char*delstr(char *q,const char *s) { char *p; while(p=strstr(q,s)) memmove(p,p+strlen(s),strlen(p+strlen(s)-1)); return q; } int main() { char s[]="blaxblafasel"; puts(delstr(s,"bla")); return 0; }
tststs
das teure memmove muss doch nun wirklich nicht sein.kann das denn mal ein profi richtig machen?
bitteeee
-
Sone schrieb:
Er meinte brace elision. Hat sich verschrieben.
Edit: Wutz, wenn es ein Fehler ist, dann kann das doch nicht in einer Warnung resultieren?
Der C Standard kennt keine (Unterscheidung zw.) Hinweis/Warnung/Fehler.
Er sagt nur, dass der Compiler irgendwie irgendwas melden muss.
Es ist also quasi implementierungsabhängig, nicht dass, sondern wie der Compilerhersteller seinen Compiler in diesem Fall reagieren lässt.
-
ui...
Danke !!!
memmove kannte ich noch nicht, werd mich gleich mal mit der referenz auseinander setzen...buffer[Buffersize]={};
Ich dachte der Buffer wird dann mit nullen gefüllt, werde dann mal ={0}; austesten.
ja, mist ich hab im makefile immer noch g++ stehen, werde ich dann auch schnell mal ändern !
Super Herzlichen Dank !
Ich werde mich dann gleich mal einarbeiten !
-
Wutz schrieb:
const char*delstr(char *q,const char *s) { char *p; while(p=strstr(q,s)) memmove(p,p+strlen(s),strlen(p+strlen(s)-1)); return q; } int main() { char s[]="blaxblafasel"; puts(delstr(s,"bla")); return 0; }
Mehr strlen Aufrufe gingen nicht?
void rmvnchr ( char* pos, size_t n ) { char* a = pos, *b = pos + n; while ( *b ) *a++ = *b++; *a = 0; } int main(void) { char string[] = "blaxblafasel"; char* pos = string; char* substring = "bla"; size_t len = strlen ( substring ); while ( NULL != ( pos = strstr ( pos, substring ))) rmvnchr ( pos, len ); puts ( string ); return 0; }