Tại sao dòng gán xâu vào char* vẫn chạy?

#include <stdio.h>
#include <stdlib.h>



int main()
{
    char *day1, *day2;
    day1="tung";
    day2= "dz";
printf("%s",day1) ;
printf("%s",day2);
}

theo như tài liệu mình đọc thì họ nói k đc sử dụng là day1="tung" chỉ đc sử dụng khi khai báo nhưng sao ở đây mình chạy thử chương trình thì vẫn ra ạ?

Sách sai rồi :smiley:

Tuy nhiên đoạn mã này cũng không ổn, do "tung" là hằng chuỗi mà gán cho char*.

3 Likes

Tài liệu sai.

2 Likes

sai sao đc bro tài liệu của admin dậy nhau học share mà :v

Bạn dẫn link đến chính xác bài đó của admin xem nào.

1 Like


chương 2 bài 4 nha bro


đây nhé bro có ghi rõ là không được làm như vậy và nếu muốn khai báo 1 string thì phải khau báo từng chữ cái 1 mà

Hình như mọi người hiểu nhầm câu hỏi của thớt. :sweat_smile:
Ý thớt là cố ý làm sai :point_right: vẫn ra kq đúng? Sao lại thế? :slight_smile:


Như ví dụ của bạn, thì có 2 hằng chuỗitungdz, 2 con trỏ char*day1day2.
Hai dòng tiếp theo là bạn gán cho day1 địa chỉ của tung, day2 chứa địa chỉ của dz. Do đó vẫn in ra bình thường được. Nhưng nếu bạn thay đổi giá trị thì nó sẽ báo lỗi do đây là const char*.

2 Likes

đúng rồi đó sherly, nhưng hình như là khi mình khai báo char* thì nó là mảng động nên là làm như vậy vẫn đc hả sherly?

Không hẳn là như bạn nói, cơ mà nhìn hình trên mong bạn hiểu được. :laughing:

P/s: Vẽ xấu quá. :laughing: :laughing:

2 Likes

theo mình biết thì

  1. cả 2, char* s hay char s[] và gán s = “hello” đều là cấp phát tĩnh, bộ nhớ được cấp phát khi biên dịch và giá trị hello là không được thay đổi const
  2. tài liệu muốn nói bạn chỉ có thể gán giá trị s 1 lần, ở trên là s = “hello” nếu bạn viết thêm ở dưới s = “hi” thì sẽ bị lỗi.
  3. bạn nên dùng codeblock để viết file .c nếu muốn học C, dùng visual studio chỉ có C++ đôi khi không đúng trong ngữ cảnh của C.

Bạn đâu có làm đúng y như trong ví dụ đâu :smiley:


Tức là bạn hiểu sai do câu này: (còn lại ko có vấn đề)

Tôi cũng có thể viết là char*, kết quả sẽ vẫn như nhau

Thực ra bản chất là khác nhau, câu khai báo char[] chính là dạng viết tắt của khởi tạo + khai báo mảng nên chỉ có thể làm một lần duy nhất là đúng! :smiley:

2 Likes

ok cảm ơn mọi người nha

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