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ứ.