30/09/2018, 20:22

Thắc mắc về chuỗi trong C

Chả là em đang đọc quyển sách Head First C, chương 2.5: String Thethory thì nó có 1 ct tìm kiếm 1 chuỗi con trong 1 chuỗi to hơn, code của nó đây ạ:


#include <stdio.h>
#include <string.h>

void find_track(char c[]);

char tracks[][80] = {
 "I left my heart in Harvard Med School",
 "Newark, Newark - a wonderful town",
 "Dancing with a Dork",
 "From here to maternity",
 "The girl from Iwo Jima",
};

void find_track(char search_for[])
{
 int i;
 for (i = 0; i < 5; i++)
    {
        if (strstr(tracks[i], search_for))
        {
              printf("Track %i: '%s'
", i, tracks[i]);
        }

    }
}

int main()
{
    char search_for[80] = "";
    printf("Search for: ");
    //scanf("%s", search_for);
    fgets(search_for, 80, stdin);
    find_track(search_for);
    return 0;
}

Trong sách thì thấy nó test ngon, chạy được, còn khi em chạy thì nó lại không hoạt động .Khi thay chỗ char search_for[80] = "";`` bằng ``char search_for[số kí tự nhập vào] = "" thì nó lại hđ. À mà trong sách nó compile bằng command line như anh @ltd mà em code bằng CodeBlocks. Mọi người có thể giải thích cho em được không?

Pham Van Hai viết 22:25 ngày 30/09/2018

Code này không hoạt động vì bạn dùng hàm fgets để nhập chuỗi -> hàm này nó bao gồm cả dấu \n trong chuỗi nên nó luôn khác với chuỗi đã có. bạn phải có bước xóa bỏ ký tự ‘\n’.

search_for[strlen(search_for) - 1] = '\0';

Bài liên quan
0