Пишу свою функцию 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 в программе допускать нельзя.

→ Ссылка