Chuyển string sang mảng char trong C++?

Các sư huynh cho em nhờ chút ạ.
Em có hàm

string VietHoa(string s)
{
	char* c = new char[s.size()];
	copy(s.begin(), s.end(), c);
	c[s.size()] = '\0';

	s = strupr(c);

	delete [] c;
	c = NULL;
	
	return s;
}

Đầu vào là 1 chuỗi string và phải in ra chuỗi string có dạng viết hoa tất cả các ký tự. (bắt buộc sử dụng strupr) em đã thực hiện chuyển string s sang mảng char. Vậy em muốn hỏi là cách xử lý của em như trên nó báo lỗi vì việc giải phóng bộ nhớ kia. Nếu bỏ nó đi thì không sao nhưng khi cấp phát động phải giải phóng bộ nhớ.
Cách xử lý triệt để là như thế nào ạ? Ai có thể gợi ý giúp em được không ạ?
Em xin chân thành cảm ơn!
Chúc các sư huynh một ngày vui vẻ ạ!

2 Likes
char* c = new char[s.size() + 1];

Ôi cảm ơn sư huynh nhiều lắm :smiley: hết lỗi rồi :smiley: cơ mà cho em hỏi tại sao phải khai báo cộng thêm 1 ạ???

ngay bản thân trong code của bạn cũng đã trả lời cho câu hỏi đó rồi
muốn dùng phẩn tử chỉ số i thì phải đảm bảo mảng có kích thước lớn hơn i

dạ em cảm ơn sư huynh nhiều ạ ^^

bạn ơi sao mình chép nguyên code bạn vào và sửa cộng 1 như mấy bạn bên dưới gợi ý và nó vẫn báo lỗi nhỉ? Mình cũng đang cần chuyển 1 chuỗi string sang thành viết hoa hoặc viết thường hết kiểu như bài của bạn mà vẫn chưa chạy dc

Code này do tình thế bắt buộc thôi, không nên copy :smiley:

Thứ hai, hàm strupr() (cùng với strlwr()) KHÔNG phải là hàm chuẩn https://en.cppreference.com/w/c/string/byte chỉ có lower upper một kí tự. Cái abstraction char* này rất là mỏng cơm :slight_smile: dùng ít thôi.

1 Like

ae ơi , tạo sao phải cấp phát cho con trỏ c vậy ? nếu ko cấp phát thì có được ko ạ ??

Không cấp phát cũng được, chỉ là sẽ bị lỗi thôi.
Bạn nghĩ tại sao phải có RAM?

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