01/10/2018, 11:20
Xin ý tưởng fix lỗi khi nhập xâu với fgets() và so sánh xâu sử dụng strcmp()
Em viết file trong C dừng khi người dùng nhập vào 2 chữ “jk”. Tối đa 1 lần nhập là 4096 kí tự! Nhưng khi kiểm tra dùng hàm strcmp() thì không bao giờ được. Nhập vào em dùng hàm fgets(). Mong mọi người giúp đỡ!
Bài liên quan
Bạn có code không bạn? Mà sao bạn không dùng
gets()
?dùng hàm fgets(): để tránh vỡ vùng nhớ! em chỉ cho 4096 kí tự 1 lần nhập. code:
em đọc kỹ lại doc của fgets đi, sẽ thấy vấn đề:
chuỗi
content
đọc vào có chứa dấu\n
nên so sánh với"jk"
ko bao giờ bằng cả, phải so sánh với"jk\n"
chỉ khi quá 4095 ký tự thì mới ko có
\n
đừng xài fflush(stdin) nữa, theo chuẩn thì nó ko có tác dụng gì. VS2015 2017 đã theo chuẩn câu lệnh này ko có tác dụng
tạo biến
char content[4096];
luôn, cấp phát động làm gì?Cảm ơn anh! Em viết code bên linux! Em cũng có chú ý là khi nhập vào 2 chữ jk thì em cho
strlen(content) = 3
Em cho nó show ra màn hìnhprintf("%d", content[3]);
–> giá trị là 0. Em gán cho thằng cần so sánh vị trí thứ 3 là 0x00 nó vẫn die nên em phải lên đây hỏi! Chắc em phải đọc kĩ từng dòng của giải thích! Em cảm ơn anh nhiều!Anh có thể cho em link doc anh đọc đc không? em tìm trên mạng thì nó chỉ nói khái quát không chi tiết! đặc biệt dòng “in which case str will contain that newline character”
http://en.cppreference.com/w/c/io/fgets
muốn coi ký tự thứ 3 là gì thì in
content[2]
chứ,content[0]
là ký tự đầu tiên rồi.mấy cái doc ít ai để ý lắm, tới khi gặp lỗi với nó mới biết mình làm gì sai
ha ha em viết nhầm! cảm ơn anh nhiều!