std::string nó làm được vậy do trong class nó auto hết cho mình rồi, còn dùng char* thì phải tự lo về vấn đề bộ nhớ thôi (trừ khi bạn viết hẳn một class như std::string)
Muốn xài char* mà nhập bất kỳ thì cấp phát động bộ nhớ:
int n1;
std::cout << "Enter max size of s1: ";
std::cin >> n1;
std::cin.ignore(); // dùng để tiêu thụ nốt cái ký tự enter trong bộ đệm
std::cout << "Enter first string: ";
char* s1 = new char[n1];
std::cin.getline(s1, n1); // nếu nhập dài hơn n1 thì phần dài hơn sẽ mất
std::cin.ignore();
int n2;
std::cout << "Enter max size of s2: ";
std::cin >> n2;
std::cin.ignore();
std::cout << "Enter second string: ";
char* s2 = new char[n2];
std::cin.getline(s2, n2);
std::cin.ignore();
int len1 = strlen(s1);
int len2 = strlen(s2);
char* s3 = new char[len1 + len2 + 1]; // tạo ra s3 có độ dài vừa đủ cộng thêm 1 ký tự '\0'
strcpy(s3, s1);
char* s33 = s3 + len1; // dịch chuyển con trỏ s3 ra sau để strcat chạy lẹ hơn
strcat(s33, s2);
std::cout << "Combined string: ";
std::cout << s3;
String(const String&);
câu lệnh trên nghĩa là gì ạ
Bạn học class constructor là hiểu.