Сравнение символов [] не работает

У меня проблема с функцией strcmp (тот же вопрос здесь, но нет хороших ответов). Если я сравниваю 2 одинаковые строки, но одна строка из структуры, эта строка ошибочно "переводится" в код сборки. Каждый символ [] из структуры - это случайные 3 символа. Изображение strcmp.asm

#define CONS 60

typedef struct LinkCity{
    char city[CONS];           // i get this char[] from file by using fgets()
    struct LinkCity* next;
} tLinkCity;
/***************************************/
    typedef struct {
        int NumberOfCity;
        tLinkCity* Link;
        double** distances;
    } tDatabaze;
/***************************************/
int GetIndexOfCity(tDatabaze* db, char * city){

    printf("%s %s", db->Link->city, city); //   > Barcelona\n Barcelona (yes, here is a newline)
    str = strcmp(db->Link->city, city);    //   str = 1  (=it should be 0)
}

2 ответа

Решение

Попробуйте удалить символ новой строки в конце строки перед сравнением, вот простая функция, которая делает это:

void removeNLine(char* string)
{
        int i ;
        for(i = strlen(string) ; i > 0 ; i--)
               if(string[i] == '\n')
                     string[i] = '\0';
}

Если я не ошибаюсь функция fgets Читает также символ новой строки в массиве. Поэтому я думаю, что причина того, что два массива не равны друг другу, состоит в том, что тот, который был прочитан с помощью fgets содержит символ новой строки

Другие вопросы по тегам