cho hỏi tí mình có cái hàm xóa khoảng trắng ở đầu của chuỗi ký tự có đoạn
while (chuoi[0] == ' ')
{
strcpy(chuoi, chuoi + 1);
}
sao hàm strcpy lại copy được đoạn chuoi+1 kia
cho hỏi tí mình có cái hàm xóa khoảng trắng ở đầu của chuỗi ký tự có đoạn
while (chuoi[0] == ' ')
{
strcpy(chuoi, chuoi + 1);
}
sao hàm strcpy lại copy được đoạn chuoi+1 kia
Vẫn là Undefined Behavior nhé
vì nó có thể copy 4 byte một lúc.
Nên tự code để copy từng byte một.
Ý mình là Tại sao hàm strcpy đó lại hiểu cái chuoi+1 là chuoi[1] con chuoi lại là chuoi[0]
Không phải vậy đâu bạn.
Bản chất của chuỗi là mảng ký tự. Cho nên khi gọi chuoi thì nó nghĩa là con trỏ trỏ tới biến mảng chuoi[0], còn chuoi + 1 là con trỏ trỏ tới biến mảng chuoi[1].
vậy khi gọi chuoi + 1 thì compiler sẽ hiểu là bạn đang gọi một chuỗi bắt đầu từ ký tự trong chuoi[1].
Còn hàm strcpy(s1, s2) có tác dụng là copy nội dung của s2 vào s1. Theo như ví dụ của bạn thì sẽ là copy nội dung chuỗi chuoi + 1 vào chuoi.
Vd:
char chuoi[] = "Hello";
printf("%s\n", chuoi);
printf("%s\n", chuoi + 1);
thì nó sẽ ra là:
Hello
ello
Có vẻ như vậy là bạn hiểu rồi nhỉ. 
Tất nhiên là sẽ có sự chồng chéo rồi. Vì bạn lấy chuoi cop vào chuoi + 1 một chuỗi phụ thuộc vào chuỗi ban đầu của nó chuoi mà lại.
Còn ý của bạn @namnntt là cop chuoi + 1 vào chuoi cơ mà. Với lại câu hỏi đưa ra là:
Thì bạn phải trả lời kiểu “Bởi vì” chứ.
K thì chi ít cũng phải giải thích cho ng ta hiểu được tại sao đoạn code trên có thể làm được như vậy chứ.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?