01/10/2018, 08:32

Tại sao đoạn code sau không bị lỗi khi chạy

E có thử test đoạn code sau trên CodeBlocks 16.01:

char str4[10];
scanf("%[^
]", str4);
printf("%s", str4);

thì thấy nó cho nhập và in ra bình thường, ko có lỗi gì hết => ??? @@
e đoán là lỗi undefined behavior có đúng ko nhỉ ?

rogp10 viết 10:38 ngày 01/10/2018

Sao bạn lại nghĩ nó có vấn đề?

Long Dragon viết 10:45 ngày 01/10/2018

Sao bạn lại nghĩ nó có vấn đề?

Khi em nhập hơn 10 ký tự thì nó vẫn in ra bình thường ấy a

rogp10 viết 10:35 ngày 01/10/2018

Vậy là tràn bộ nhớ rồi. Do khung stack cũng tương đối nên chưa ghi đè lên thông tin điều khiển thôi.

Long Dragon viết 10:41 ngày 01/10/2018

Do khung stack cũng tương đối nên chưa ghi đè lên thông tin điều khiển thôi.

Nghĩa là sao a ? Đừng nói trừu tượng, e ko hiểu đâu

Mai Hữu viết 10:45 ngày 01/10/2018

Thì nó sẽ chiếm sang phần bộ nhớ chưa được cấp phát. nếu chỗ đó chưa có ct nào sử dụng thì ko sao, nếu có ct đang sử dụng vùng nhớ đó thì nó sẽ lỗi. cái này gọi là hên xui

Duy Hải viết 10:35 ngày 01/10/2018

%[^\n] nhập xong enter sẽ tự động chèn NULL vào, sau đó kết thúc chuỗi nhập mà. nên mình nghĩ n bt mà, đâu có lỗi j đâu

rogp10 viết 10:33 ngày 01/10/2018

Tức là nếu chương trình bạn phức tạp hơn thì thế nào cũng ghi đè lên một biến nào đó của bạn, cái này ko xem code cứ nghĩ là ko có gì.

Đọc và ghi tràn bộ đệm đem lại những mối nguy hại khôn lường (mà trên mạng chỉ nói vắn tắt).

Bài liên quan
0