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.