Kiểu char* trong C++

Sign Up

Log In

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

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,

yeuhangxom:

yeuhangxom:

có thể dòng cin.getline(s,100) kia nó cho phép đọc 100 kí tự nó đè vào s

Test


Bổ sung thêm

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ập n - 1. Một cái thiếu đó là \n. Sau đó getline sẽ thay \n bằng \0. Theo mình đọc được là thế :smile:

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.

:joy:


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.

Rốt cuộc thì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.

Home
Categories
FAQ/Guidelines
Terms of Service
Privacy Policy


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?