Почему не получается strcmp сравнить строку из структуры и массив - строку?

Я снова чего-то не понимаю. Одна строка p->date.street из структуры char[20] имеет примерный вид Ленина______________ и вторая введенная пользователем с клавиатуры key_str, но приведенная к тому же ввиду, strcmp почему-то проходит мимо. Проблема в функции search_for_key

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <io.h>
#include <Windows.h>


struct adres_book
{
    char fio[32];
    char street[20];
    unsigned short int home;
    unsigned short int flat;
    char date[8];
} book;

struct tree {
    int id;
    struct adres_book data;
    int balance;
    tree * left;
    tree * right;
};

tree * node_new(int ind, adres_book data) {         // Добавление нового элемента структуры
    tree * node = new tree;
    if (!node)
        return NULL;
    node->id = ind;
    node->data = data;              // Присваиваем данные
    node->balance = 0;
    node->left = NULL;              // Указываем потомков
    node->right = NULL;
    return node;
}

tree * tree_insert(tree * p, int ind, adres_book data, boolean &Vr, boolean &Hr) {      // Вставка элемента в дерево
    tree * q;
    if (p == NULL) {
        p = node_new(ind, data);
        Vr = true;
        return p;
    }
    if (strcmp(p->data.street, data.street) > 0) {//p->id > ind                                                 // Левая ветка
        p->left = tree_insert(p->left, ind, data, Vr, Hr);
        if (Vr) {
            if (p->balance == 0) {
                q = p->left;
                p->left = q->right;
                q->right = p;
                p = q;
                q->balance = 1;
                Vr = false;
                Hr = true;
            }
            else {
                p->balance = 0;
                Hr = true;
            }
        }
        else {
            Hr = false;
        }
    }
    else if (strcmp(p->data.street, data.street) < 0) {//p->id < ind                                            // Правая ветка
        p->right = tree_insert(p->right, ind, data, Vr, Hr);
        if (Vr) {
            p->balance = 1;
            Vr = false;
            Hr = true;
        }
        else if (Hr) {
            if (p->balance > 0) {
                q = p->right;
                p->right = q->left;
                p->balance = 0;
                q->balance = 0;
                q->left = p;
                p = q;
                Vr = true;
                Hr = false;
            }
            else {
                Hr = false;
            }
        }
    }
    return p;
}

void search_for_key(tree * p, char key_str[], char * key_dat) {     // Поиск вершины по ключу
    char a[20] = {};
    for (int i = 0; i < 20; i++) { // Тут привожу key_str к такому же виду как запись в структуре
        a[i] = key_str[i];         // т.е. добавляю пробелы до конца строки
        if (key_str[i] == '\0')
            while (i < 20) {
                a[i] = ' ';
                i++;
            }
    }
    //Это значение переменных в режиме отладчика
    //0x003bfab0 "ЌЁЄ®¤Ё¬®ў           ...
    //0x00636dcc "ЌЁЄ®¤Ё¬®ў           ...

    while (p != NULL) {
        if (strcmp(a, p->data.street) == 0 )// Выдает false??????????????????? 
            printf("\nResult search: \n%-4.d %s%s %3hu %3hu %s", p->id, p->data.fio, p->data.street, p->data.home, p->data.flat, p->data.date);
        else if (strcmp(key_str, p->data.street) < 0)
            p = p->left;
        else if (strcmp(key_str, p->data.street) > 0)
            p = p->right;
    }
}

int main()
{
    FILE * fp = fopen("BASE4.DAT", "rb");
    tree * p = NULL;
    boolean Hr;                     // Вертикальный рост дерева
    boolean Vr;                     // Горизонтальный рост дерева
    if (fp == NULL) {
        printf("Error File!\n");
        system("pause");
        exit(1);
    }
    memset(&book, 0, sizeof(book));
    int ind = 1;
    //fread(&book, sizeof(book), 1, fp);
    while (fread(&book, sizeof(book), 1, fp) == 1) {
        printf("%-4.d ", ind);
        for (int i = 0; i < 32; ++i) printf("%c", book.fio[i]);
        printf(" ");
        for (int i = 0; i < 20; ++i) printf("%c", book.street[i]);
        printf(" %3hu %3hu ", book.home, book.flat);
        for (int i = 0; i < 8; ++i) printf("%c", book.date[i]);
        Hr = true;
        Vr = true;
        p = tree_insert(p, ind, book, Vr, Hr);
        ind++;
        puts("");
        if (ind == 10 + 1)
            break;
    }
    char search_street[20] = {};
    char search_date[8] = {};
    printf("\nEnter key street: ");
    scanf("%s", search_street); // Тут вводим строку
    search_for_key(p, search_street, search_date); // На второй параметр пока не обращаем внимания
    
    fclose(fp);
    system("pause");
}

Файл БД


Ответы (0 шт):