problem beim schreiben von pointern die an funktion übergeben wurden



  • mist, ich caste ja immer noch , tüdeldü 🙂 den ersetze ich auch schnell noch....



  • vlt ersetze ich printf noch durch sprintf, aber bitte jetzt nicht wegen solchen sachen meckern, über bufferoverflows ham wir ja schon geredet 😛


  • Mod

    mcmorf! schrieb:

    das ist ja auch mal was... unbeliebte aussagen werden hier zensiert ?!?

    Ja. Nicht nur das: Du und dein ganzer Thread schlingern gerade zielsicher auf eine vollständige Sperrung zu. Lass dir das eine Warnung sein. Benimm dich wie ein normaler Mensch!



  • SeppJ schrieb:

    mcmorf! schrieb:

    das ist ja auch mal was... unbeliebte aussagen werden hier zensiert ?!?

    Ja. Nicht nur das: Du und dein ganzer Thread schlingern gerade zielsicher auf eine vollständige Sperrung zu. Lass dir das eine Warnung sein. Benimm dich wie ein normaler Mensch!

    ??? was habe ich denn jetzt schon wieder gemacht ?



  • 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;
    }
    

  • Mod

    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.


  • Mod

    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;
    }
    

Anmelden zum Antworten