01/10/2018, 10:18
Kiểu char* trong C++
Mình có đoạn code sau:
char *s = new char[5]; cin.getline(s,100); cout<<s<<endl; cout<<strlen(s);
Cho mình hỏi tại sao biến s chỉ xin cấp phát 5 phần tử nhưng khi mình nhập lớn hơn 5 phần tử thì nó vẫn nhận, và in ra chuỗi đã nhập. Như vậy có bị lỗi bộ nhớ không
Bài liên quan
có thể dòng cin.getline(s,100) kia nó cho phép đọc 100 kí tự nó đè vào s , hoặc idm nó bị lỗi chẳng hạn ;p,
Test
Bổ sung thêm
Hi Vu Dao Anh Tuan.
Vì code bạn ngắn. Có lỗi bộ nhớ.
nếu bạn thay 6 vài thì nó hiển thị ra 6 , nhưng chuỗi có độ dài 5 thì strlen = 5 là đúng r
getline
nó sẽ lấy hết kể cả\n
. Và nếu mình truyền cho nó max len làn
thì nó chỉ nhậpn - 1
. Một cái thiếu đó là\n
. Sau đógetline
sẽ thay\n
bằng\0
. Theo mình đọc được là thếmình thấy nó klq cho lắm , cái vấn đề ở đây là nó hiển thị dài hơn 5 kí tự mà
Thật ra thì việc bị vượt qua maxSize thì compiler cũng không quá để tâm cho lắm. Đôi lúc chương trình vẫn chạy được ngỡ như mọi chuyện hoàn hảo. Nhưng những vấn đề tiềm tàng thì không thể tránh được.
Rốt cuộc thì
= new char[5]
cũng chỉ để phục vụ mục đích an toàn bộ nhớ, đảm bảo là trong 5 ký tự đó thì các biến khác không được ghi vào. Còn bạn nhập dài hơn cũng được, nhưng nhỡ mấy ô nhớ ở sau [5] lại có chương trình khác đang dùng thì có lỗi. Thế thôi.Mà đã là C++ thì dùng luôn
string
đi chứchar*
làm gì cho vất vả.Tràn bộ đệm chỉ có chạy lên mới bắt lỗi được.