Пишу свою функцию strcmp. В Visual Studio работает корректно, а в Visual Studio Code сообщает об ошибке сегментрования
#include <stdio.h>
int my_strcmp (const char* right_string, const char* left_string){
int i = 0;
for (int i; *(right_string + i) != '\0'; i++){
if ((*(right_string + i) - *(left_string + i)) != 0)
return (*(right_string + i)-*(left_string + i));
}
return (*(right_string + i)-*(left_string + i));
}
int main() {
//setlocale(LC_ALL, "Rus");
char str1[] = "aaaa";
char str2[] = "aaaz";
int b = my_strcmp(str1, str2);
printf("%d", b);
return 0;
}
Ответы (1 шт):
Автор решения: gbg
→ Ссылка
Вы объявили переменную i дважды
int i = 0; // первый раз
for (int i; *(right_string + i) != '\0'; i++){ //второй раз
Второе объявление действует только для цикла for и его тела, и в этом объявлении отсутствует инициализация. Работа с неинициализированной переменной - UB
UB может выражаться в произвольной работе программы - она может падать, может и нормально работать. Это зависит от сложного сочетания факторов.
По этой причине, UB в программе допускать нельзя.