Sử dụng hàm strcpy để xoá khoảng trắng ở đầu chuỗi ký tự

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é :smiley: vì nó có thể copy 4 byte một lúc.

Nên tự code để copy từng byte một.

3 Likes

Ý 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ỉ. :slightly_smiling_face:

5 Likes

http://demin.ws/blog/english/2011/07/14/strcpy-on-overlapped-strings/

3 Likes

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

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