Eigene Funktionen [ERLEDIGT]



  • wenn schon, dann so:

    unsigned char *_strchr( const unsigned char *s, int c ) { 
        while(*s && *s != c) 
            s++; 
        return *s ? s : NULL; 
    }
    


  • Nein, so:

    unsigned char *_strchr(const unsigned char *s, int c)
    {
    	while(*s && *s != c)
    		s++;
    
    	return *s ? s : 0;
    }
    

    😡 ⚠



  • nö das is leider komplett falsch.

    The terminating null-character is considered part of the C string. Therefore, it can also be located to retrieve a pointer to the end of a string.



  • mein code ist der beste...



  • Sorry, dass ich erst so spät antworte, war 2 Wochen weg...
    Welcher ist jetzt der einfachste, beste, schnellste Code???
    Ich möchte nicht den schnellsten, den besten, den grössten oder was auch immer einzel ausprobieren....

    mfg 08mmarte



  • der-ulf schrieb:

    #define ___strchr(s,c) (((char *(*)(char *, int))\
    (char*)"\x8b\x44\x24\x04\x8b\x54\x24\x08\
    \x8a\x08\x84\xc9\x74\x0f\x0f\xbe\xc9\x3b\
    \xca\x74\x08\x8a\x48\x01\x40\x84\xc9\x75\
    \xf1\x85\xd2\x74\x08\x8a\x10\xf6\xda\x1b\
    \xd2\x23\xc2\xc3")(s, c))
    


  • Vielen Dank...



  • der-ulf, troll doch bitte in einem 1337-h4xx0rz-Ph0rum, aber nicht hier. Danke.

    @ 08mmarte: Die beste Variante ist in den meisten Fällen bereits bestehenden Code zu übernehmen. strchr() gibts in der Standard-C-Library.



  • Tim schrieb:

    der-ulf, troll doch bitte in einem 1337-h4xx0rz-Ph0rum, aber nicht hier. Danke.

    @ 08mmarte: Die beste Variante ist in den meisten Fällen bereits bestehenden Code zu übernehmen. strchr() gibts in der Standard-C-Library.

    Ist mir bekannt, aber ich "darf" diese fuktion selber schreiben....



  • 08mmarte schrieb:

    Ist mir bekannt, aber ich "darf" diese fuktion selber schreiben....

    man "darf" ohnehin jeder Funktion neu schreiben, aber wozu das Rad ständig neu erfinden? Die Funktionen, der glibc sind in der Regel vorzuziehen, weil sie u.a. für deine Plattform optimiert sind.



  • Danke, aber könnt ihr mir hierbei trotzdem helfen:

    char *Mystrchr(const char *str, int c)
    {
    	int i = 0;
    	char *pointer = 0;
    
    	while (i < Mystrlen(str))
    	{
    		if (str[i] == c)
    		{
    			*pointer = str[i+1];
    			printf ("%c ist an der %d. Stelle\n", *pointer, i+1);
    		}
    		i++;
    	}
    	return (0);
    }
    

    Fehlermeldung

    Die Anweisung in "0x00411707" verweist auf Speicher in "0x00000000. Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.
    

    Werde nicht schlau draus... 😕



  • Tim schrieb:

    der-ulf, troll doch bitte in einem 1337-h4xx0rz-Ph0rum, aber nicht hier. Danke.

    @ 08mmarte: Die beste Variante ist in den meisten Fällen bereits bestehenden Code zu übernehmen. strchr() gibts in der Standard-C-Library.

    das is kein troll, haste was schnelleres anzubieten? nein also m0wl p0well



  • 08mmarte schrieb:

    Danke, aber könnt ihr mir hierbei trotzdem helfen:

    char *Mystrchr(const char *str, int c)
    {
    	int i = 0;
    	char *pointer = 0;
    	
    	while (i < Mystrlen(str))
    	{
    		if (str[i] == c)
    		{
    			*pointer = str[i+1];
    			printf ("%c ist an der %d. Stelle\n", *pointer, i+1);
    		}
    		i++;
    	}
    	return (0);
    }
    

    Fehlermeldung

    Die Anweisung in "0x00411707" verweist auf Speicher in "0x00000000. Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.
    

    Werde nicht schlau draus... 😕

    naja, pointer ist ein NULL-Pointer, also zeigt auf eine ungültige Adresse. Mit *pointer versuchst du den NULL-Poiner zu deferenzieren, was ja nicht gehen kann, da der NULL-Pointer ins Nirvana zeigt. Lies mal die Fehlermeldung (nicht nur copy&paste)



  • mach aus:

    08mmarte schrieb:

    ...
    if (str[i] == c)
    {
       *pointer = str[i+1];
       printf ("%c ist an der %d. Stelle\n", *pointer, i+1);
    }
    ...
    }
    

    das:

    if (str[i] == c)
    {
        printf ("%c ist an der %d. Stelle\n", c, i+1);
    }
    

    die variable 'pointer' brauchst du doch gar nicht.
    🙂



  • Danke jetzt funktionierts... 👍



  • EDIT: Hat sich erledigt!


Anmelden zum Antworten