Dies ist der Code für eine C-Funktion, die 1 zurückgibt, wenn String s1 vor String s2 in einem Dictionary vorkommt oder -1 zurückgibt, wenn s2 vor s2 erscheint oder 0 zurückgibt, wenn sie gleich sind.Code funktioniert nicht. Keep segmentation fault (core dumped)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int strcmp_ign_case(char *s1, char *s2){
char *s1Copy;
char *s2Copy;
char *s1Copy3 = s1Copy;
char *s2Copy3 = s2Copy;
char *s1Copy2 = s1;
char *s2Copy2 = s2;
while(*s1Copy2 != '\0'){
*s1Copy3 = *s1Copy2;
*s1Copy3 = tolower(*s1Copy3);
s1Copy3++;
s1Copy2++;
}
*s1Copy3 = '\0';
while(*s2Copy2 != '\0'){
*s2Copy3 = *s2Copy2;
*s2Copy3 = tolower(*s2Copy3);
s2Copy3++;
s2Copy2++;
}
*s2Copy3 = '\0';
while((*s1Copy != '\0') || (*s2Copy != '\0')){
if(*s1Copy > *s2Copy){
return 1;
} else if(*s1Copy < *s2Copy){
return -1;
} else {
s1Copy++;
s2Copy++;
}
}
if((*s1Copy == '\0') && (*s2Copy == '\0')){
return 0;
}
}
Ich verstehe nicht, was mit dem Code falsch ist. Bitte hilf mir den Fehler hier zu verstehen. Vielen Dank!
Dies ist die wichtigste, dass ich verwende es zu testen:
void main(){
char *a1 = "hello";
char *a2 = "hell";
char *a3 = "world";
printf("strcmp_ign_case1: %d\n", strcmp_ign_case(a1,a2));
printf("strcmp_ign_case2: %d\n", strcmp_ign_case(a1,a3));
printf("strcmp_ign_case3: %d\n", strcmp_ign_case(a2,a3));
}
Haben verwenden Sie einen Debugger, welche Zeile verursacht den Absturz zu sehen? – immibis
Anfangs sind 's1Copy' und' s2Copy' nicht definiert, oder? Aber Sie verwenden sie dann, um 's1Copy3' und' s2Copy3' zu initialisieren, was sinnlos ist, da Sie nur undefinierte Werte kopieren. Also sind alle 4 davon undefiniert. Dann, in der ersten Schleife, versuchen Sie, in '* s1Copy3' zu speichern. Das ist ein Speicherzugriffsfehler, da Sie str über einen undefinierten Zeiger speichern. Spiel ist aus. –