strtok, richtige Benutzung?



  • Oooh jaa, sehr wichtig !
    Der Stern ist der sogenannte Dereferenzierungsoperator. Mit dem kannst du dir den Inhalt angucken, auf den der Zeiger gerade zeigt.

    #include <stdio.h> 
    
    int main () 
    { 
       char *source = "hello vista"; // source ist zeiger auf zeichenkette
    
       printf( "%c\n", *source ); // ausgabe h
       source++; // der zeiger zeigt ein byte weiter
       printf( "%c\n", *source ); // ausgabe e
       source++; // der zeiger zeigt ein byte weiter
       printf( "%c\n", *source ); // ausgabe l
       source++; // der zeiger zeigt ein byte weiter
       printf( "%c\n", *source ); // ausgabe l
       source++; // der zeiger zeigt ein byte weiter
       printf( "%c\n", *source ); // ausgabe o
       source++; // der zeiger zeigt ein byte weiter
       printf( "%c\n", *source ); // ausgabe l
    
       return 0;
    }
    


  • danke, gucke ich mir jetzt mal an 🙂

    Offtopic:
    ich brauche mal ganz schnell Hilfe bitte:
    strcat(buffr, tmplength);
    wobei tmplength vom typ int ist, sodass es eine Fehlermeldung (Access Violation) gibt. wie kann ich es richtig machen?

    strcat(buffr, (char *)tmplength);
    scheint auch nicht zu funktionieren



  • jhk schrieb:

    Wie geht das denn einfacher?

    #include <stdio.h> 
    
    void replace_light( char* str, char cOld, char cNew )
    {
    	while(*str)
    	{
    		if ( *str == cOld ) *str = cNew;
    		str++;
    	}
    }
    
    int main () 
    { 
      char str[] = "?Hallo?Echo?";
      replace_light ( str, '?', '!' );
      puts(str);
      return 0;
    }
    


  • nuub schrieb:

    ich brauche mal ganz schnell Hilfe bitte

    Immer ruhig mit den jungen Pferden, das ist keine Notdienstzentrale hier.

    Siehe deklaration von strcat:

    char *strcat( char *strDestination, const char *strSource );
    

    Da kannst du nicht einfach einen int dranhängen. Benutz doch eifach weiter char*, so wie du es bisher gemacht hast.



  • ich muss die zahl, die in tmplength enthalten ist, an den string dranhängen...



  • int main () 
    { 
    	char cHaengDichAn[256]= "Eins Eins Null-> ";
    	int tmplength = 110;
    
    	sprintf( cHaengDichAn, "%s%d", cHaengDichAn, tmplength );
    	puts(cHaengDichAn);
    
      return 0;
    }
    


  • Vielen Dank euch allen!

    Noch einmal kurz zum Them zurück:
    1. so sieht die Funktion aus:

    void GetPost(char *str, char *in , char *repl, char *out) {
    	char *dummy1 = in;
    	char *dummy2 = repl;
    	while (*str) {
    		if (*str == *in) {
    			in++;
    			if (*in == 0) {
    				while (*repl) *out++ = *repl++;
    				in = dummy1;
    				repl = dummy2;
    			}
    		}
    		else {
    			in = dummy1;
    			*out++ = *str;
    		}
    		str++;
    	}
    	*out = 0;
    }
    

    2. Das möchte ich machen, wenn ich nur eines von beiden ausführe, klappt alles wunderbar, wenn ich beides machen möchte, passiert nichts weiter, und außerdem sind die '#' nach dem ersten mal ersetzen weg...

    char *mesdummy = "hallo #name#, du bist #adjektiv#";
    GetPost(mesdummy, "#name#", nam, mesdummy);
    GetPost(mesdummy, "#adjektiv#", adj, mesdummy);
    


  • nuub schrieb:

    char *mesdummy = "hallo #name#, du bist #adjektiv#";
    GetPost(mesdummy, "#name#", nam, mesdummy);
    GetPost(mesdummy, "#adjektiv#", adj, mesdummy);
    

    du solltest als ziel nicht den quellstring verwenden,
    a) er wird verändert, so das die funktion im weiteren verlauf mit falschem quellstring arbeitet.
    b) er ist in einem read-only bereich und das programm stürzt möglicherweise ab.



  • Beim ersten funktioniert doch alles wunderbar...
    beim zweiten passiert irgendwie nichts..
    außerdem soll das in den gleichen 😕



  • Du kannst konstante Zeichenketten nicht im Programmlauf verändern.

    char* pConst = "Ich bin eine konstante Zeichenkette".
    

    Char Arrays dagegen, kannst du verändern, diese:

    char abc[] = "Mich kannst du aendern";
    

    Und diese:

    char def[1024] = "Mich kannst du auch aendern";
    

Anmelden zum Antworten