Это код для функции C, которая возвращает 1, если строка s1 появляется перед строкой s2 в словаре или возвращает -1, если s2 появляется перед s2 или возвращает 0, если они одинаковы.Код не работает. Продолжайте получать ошибку сегментации (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;
}
}
Я не понимаю, что не так с кодом. Пожалуйста, помогите мне понять ошибку здесь. Благодаря!
Это главное, что я использую, чтобы проверить:
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));
}
ли вы использовать отладчик, чтобы увидеть, какие строки вызывает сбой? – immibis
Изначально 's1Copy' и' s2Copy' не определены, не так ли? Но вы затем используете их для инициализации 's1Copy3' и' s2Copy3', что бессмысленно, поскольку вы просто копируете неопределенные значения. Таким образом, все 4 из них не определены. Затем в первом цикле вы пытаетесь сохранить '* s1Copy3'. Это ошибка доступа к памяти, поскольку вы храните ее через неопределенный указатель. Игра закончена. –