Do con trỏ t
sau khi thoát khỏi vòng lặp thì đang nằm ở cuối chuỗi bạn vừa tách. Có phải là t++
thì nó sẽ tăng dần không?
Cách sửa:
-
#include <iostream>
using namespace std;
int main(){
char *s="Hello world!", *t;
t= new char [50];
for (int i=2; i<8; i++){
*(t++)=*(s+i); // <==
}
*(t)='\0'; // <==
t-=6; // <== Đưa con trỏ về đúng vị trí đầu tiên.
cout <<t;
delete[] t; // Nếu t bị thay đổi sai với vị trí ban đầu sẽ có lỗi khi gọi đến free().
}
-
#include <iostream>
using namespace std;
int main(){
char *s="Hello world!", *t;
t= new char [50];
for (int i=2; i<8; i++){
*(t+i-2)=*(s+i); // Không thay đổi giá trị của t.
}
*(t+6)='\0';
cout << t;
delete[] t;
}
Nếu bạn chỉ muốn tìm hiểu về con trỏ thì được. Nhưng không khuyến khích dùng kiểu char
khi thao tác với chuỗi trong C++, thư viện <string>
đã hỗ trợ đủ.
Nên chú ý khi dùng toán tử ++
và --
.