Chuỗi nhập vượt quá kích thước thì trong bc31 ko bị báo lỗi còn trong mấy compiler khác là báo lỗi hoặc sẽ bị crash luôn đó.
các bạn cho tui hỏi, tại sao mà mình đã khai báo con trỏ hay một cái mảng với một độ dài cố định rồi, nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn? ví dụ:
khi đó mình nhập một chuỗi có độ dài lớn hơn 3 kí tự thì chương trình vẫn gets và puts rất ok, kô thiếu một chữ, như vậy là sao? ý nghĩa của số 3 là ji?void main()
{
//....
char str[3];
flushall();
printf("moi nhap chuoi: ");
gets(str);
puts(str);
//....
}
ko có việc gì khó, chỉ sợ... tiền ko nhiều...
Chuỗi nhập vượt quá kích thước thì trong bc31 ko bị báo lỗi còn trong mấy compiler khác là báo lỗi hoặc sẽ bị crash luôn đó.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
cấp phát cho char *str 3 ô nhớý nghĩa của số 3 là ji?
Thầy mình nói C là ngôn ngữ giả định người lập trình biết mình đang làm cái gì nên nó rất dễ tính.nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn?
Nhưng dễ dãi ko có nghĩa là an toàn, bạn thử nhập khoảng 50 chữ khi get(str) kia xem chuyện gì xảy ra khi kết thúc chương trình :-"
code ra gió bão
Theo hiểu biết của mình, khi khai báo nó cấp phát cho 1 vùng nhớ, nói như vậy không hẳn đúng, đơn giản là nó sẽ kiếm một chỗ còn trống đủ để bạn vứt cái đống bạn muốn vào, nhưng có những lúc cái chỗ đó rộng hơn bạn cần vì vậy khi cho thừa một chút vào đó cũng được, nhưng nhiều quá nó sẽ báo lỗi (đó là với các compile thoải mái), với cái chặt hơn có thể vì sợ mất giữ liệu mà nó kiểm soát chặt hơn lượng bộ nhớ sử dụng.các bạn cho tui hỏi, tại sao mà mình đã khai báo con trỏ hay một cái mảng với một độ dài cố định rồi, nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn? ví dụ:
- bc3.1 cho nó vào trash-can.
- Trong C++ dùng cin.getline( str, size_of_string ). gets() là 1 trong những API tồi nhất của C, hãy để nó vào dĩ vãng!
- Hoặc dùng std::string.