Vì sao có thể thay đổi 1 ký tự trong một chuỗi trong C++
Mình đang đọc tới bài chuỗi trong tutorial C++ của forum thì có gặp 1 câu như sau:
Khai báo và khởi tạo bằng một chuỗi kí tự cố định:
char foo[] = "Le Tran Dat";
Chương trình sẽ tự động cấp phát bộ nhớ vừa đủ để lưu 11 kí tự của chuỗi mình đã gán, và 1 ô nhớ để lưu thêm kí tự kết thúc chuỗi ‘ ’. Chương trình sẽ tự động thêm vào kí tự kết thúc chuỗi ‘ ’ khi khởi tạo cho mảng kí tự bằng một chuỗi các kí tự như trên.Với cách khởi tạo này, mình gán luôn cho mảng kí tự foo một chuỗi kí tự được đặt trong cặp dấu nháy kép. Chuỗi kí tự trong cặp dấu nháy kép này được coi như là một chuỗi cố định (tương tự hằng số) và chúng ta không thế thay đổi kí tự khác cho bất kì phần tử nào trong mảng.
Mình thử làm 1 chương trình tương tự để kiểm tra thì vẫn có thể thay đổi đươc ký tự ấy:
#include <iostream>
using namespace std;
int main()
{
char str[] = "Hello world!";
cout << str << endl;
str[1] = 'f';
cout << str;
return 0;
}
Và ideone.com vẫn cho kết quả bình thường: https://ideone.com/ThXMe6
Mọi người có thể giải thích khuất mắt chỗ này xíu cho mình được ko ạ?
Cảm ơn !
khúc mắc
Như vậy là tài liệu chưa chuẩn.
Đây chỉ là mảng
foo[]
không có gì đặc biệt.Nhưng:
thì con trỏ
foo
trỏ vào vùng nhớ hằng (viết trong binary luôn) và sẽ gây lỗi như đã đề cập.Dạ cảm ơn anh ^^
Mà cho em hỏi thêm là nếu trong C++ để nhập chuỗi có khoảng trắng thì dùng
cin.getline()
sẽ an toàn hơn dùng hàmgets()
của C ạ?Đã code C++ thì dùng luôn
cin.getline()
đi bạn. Dùng luônstd::string
nữa.