Anfänger, Frage zu string.h



  • Hallo,

    ich bin absoluter Neuling in Sachen C, arbeite mich da erst ein.
    Ich teste einfache Funktionen aus der string.h um C zu lernen und
    dieses ist mein erster Post, weil ich hier nicht mehr weiterkomme.
    Habe versucht das mit Google zu lösen, aber schaffe es nicht.

    Ich habe ein String mit "ABCDEFGH" und möchte den nach Zeichen
    durchsuchen. Die ersten beiden Beispiele funktionieren noch.
    Die letzten beiden nicht mehr, aber ich weiß nicht warum.
    Mir kommt es besonders auf die letzte Variante an, in der
    ich das zu suchende Zeichen setze mit zeichen = string[1];.

    Vielliecht kann mir jemand sagen warum das nicht geht und was
    ich falsche mache, bzw. wo ich das nachlesen kann.

    Danke

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int find_str(char const* str, char const* substr) {
    	char* pos = strstr(str, substr);
    	return (pos - str);
    }
    
    int main(void) {
    
    	int iA,iB,iC,iD;
    	char zeichen;
    	char string[] = "ABCDEFGH";
    
    	/* Das funktioniert */
    	iA = find_str(string, "B");
    	printf("iA '%d'\n", iA);
    
    	/* das auch */
    	iB = find_str(string, "B");
    	printf("iB '%d'\n", iB);
    
    	/* das nicht mehr */
    	zeichen = "B";
    	iC = find_str(string, zeichen);
    	printf("iC '%d'\n", iC);
    
    	/* das auch nicht */
    	zeichen = string[1];
    	iD = find_str(string, zeichen);
    	printf("iD '%d'\n", iD);
    
    	return (EXIT_SUCCESS);
    }
    

  • Mod

    Zeichen (char) und Zeichenketten (Arrays aus char) sind zwei ganz verschiedene Dinge.



  • Wieso suchst du in Google?
    Frag deinen Compiler.
    Solche Typunverträglichkeit sollten alle gängigen C-Compiler als Warnungen melden, evtl. stellte die Warnstufe höher.
    Der Typ

    char const*
    

    wird erwartet, du übergibst mit zeichen aber

    char
    

    .
    char und char const* sind inkompatible Typen, deshalb funktioniert das Ganze nicht.


Anmelden zum Antworten