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:

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;
}

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 :sweat:


Như vậy là tài liệu chưa chuẩn.

char foo[] = "Le Tran Dat";

Đây chỉ là mảng foo[] không có gì đặc biệt.

Nhưng:

char* foo = "Le Tran Dat";

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.

5 Likes

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àm gets() của C ạ?

Đã code C++ thì dùng luôn cin.getline() đi bạn. Dùng luôn std::string nữa.

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