Eingabe von 2 Strings, Adresse und Länge



  • Hallo,

    was geht bei diesem Programm nicht? bekomme immer einen speicher-fehler.

    das programm soll zwei strings einlesen und dann die adresse und die länge des längeren zurückgeben 😉

    mfg

    #include <stdio.h>

    void minstr(char *a, char *s1 , char *s2, int *p);
    int main(void) {

    char b;
    char c1[100];
    char c2[100];
    int m;

    m = 0;

    printf("String 1 eingeben\n");
    scanf("%s", &c1);

    printf("String 2 eingeben\n");
    scanf("%s", &c2);

    minstr(&b,c1,c2,&m);

    printf("Adresse des Strings: %d, Laenge des Strings %d \n", &b, &m);

    }

    void minstr(char *a, char s1[], char s2[], int *p)

    {

    int j;
    int i;
    int zaehler1;
    int zaehler2;
    p = 0;
    i = 0;
    j = 0;

    zaehler1 = zaehler2 = 0;

    while(s1[i] != '\0')
    {
    zaehler1++;
    i++;
    }

    while (s2[j] != '\0')
    {
    zaehler2++;
    j++;
    }

    if (zaehler1 > zaehler2)

    { *a = s1[0];

    i = *p;
    }

    else

    { *a = s2[0];

    j = *p;
    }

    }



  • Tut mir leid dein Programm ist unübersichtlich dargestellt ich würds so machen:
    (Ja alles vorgekaut ich weis ihr könnt ja wegschauen)

    #include <stdio.h>
    #include <conio.h>
    
    #define SIZE 100
    
    void vergleich(char *a,char *b);
    
    int main()
    {
    	char arr1[SIZE]={0},arr2[SIZE]={0},ergebnis[SIZE]={0};
    	char *pa,*pb;
    	printf("String1 eingeben:");
    	fgets(arr1,SIZE,stdin);
    
    	printf("String2 eingeben:");
    	fgets(arr2,SIZE,stdin);
    
    	pa=&arr1;
    	pb=&arr2;
    
    	vergleich(pa,pb);
    
    	getch();
    
    	return(0);
    }
    
    void vergleich(char *a,char *b)
    {
    	int x=0,y=0,ad1=0,ad2=0;
    	while(a[x])
    	{
    		x++;
    	}
    	while(b[y])
    	{
    		y++;
    	}
    	if(x>y)
    	{
    		ad1=&a;
    		printf("\nString1 ist größer: %s\nAdr.:%i",a,ad1);
    	}
    	else if(x<y)
    	{
    		ad2=&b;
    		printf("\nString2 ist größer: %s\nAdr.:%i",b,ad2);
    	}
    	else
    	{
    		ad1=&a;
    		ad2=&b;
    		printf("\nBeide Strings sind gleich lang!\n\n");
    		printf("String1: %sAdr.: %i",a,ad1);
    		printf("\n\nString2: %sAdr.: %i",b,ad2);
    	}
    }
    


  • @Jolly
    Der Fehler liegt einerseits in der Zuweisung i = *p bzw. j = *p, das muss andersrum sein. Außerdem kannst du dir die zaehler Variablen sparen, da du ja eh mit i und j mitzählst ;).
    Der zweite Fehler liegt in der Ausgabe. printf() erwartet nicht die Adresse deiner Variablen.



  • i = *p bzw. j = *p, das muss andersrum sein

    p wird innerhalb der Funktion auf 0 gesetzt (erste Zeile unter den Variablendeklarationen) - sollte man vielleicht auch noch ändern 😉



  • Asgard schrieb:

    i = *p bzw. j = *p, das muss andersrum sein

    p wird innerhalb der Funktion auf 0 gesetzt (erste Zeile unter den Variablendeklarationen) - sollte man vielleicht auch noch ändern 😉

    Stimmt, sonst krachts.


Anmelden zum Antworten