Сравнение символов [] не работает
У меня проблема с функцией 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
содержит символ новой строки