01/10/2018, 11:57

Strcpy(s, s + 1) là gì? s + 1 trong đó có nghĩa là gì?

em không hiểu cái lệnh này là sao: strcpy(s, s + 1);
s + 1 trong đó là gì ạ.
source code đậy ạ:

'char *gets(char *s);
int puts(const char* s);

void xoaKhoangTrangTrai(char *s);

void main(int argc, char* argv[]){
    char *s[31];
    gets(s);
    xoaKhoangTrangTrai(s);
    puts(s);
}

void xoaKhoangTrangTrai(char *s){
    while(s[0] == ' ')
        strcpy(s, s + 1);
}
'
Lê Vũ Huy viết 14:06 ngày 01/10/2018

http://www.cplusplus.com/reference/cstring/strcpy/
Bạn chịu khó đọc hướng dẫn về hàm có sẵn của c++ trên google rất nhiều, tiếng anh và tiếng việt đều có.
Hàm này thực chất là copy giá trị ở tham số thứ 2, bỏ vào tham số thứ nhất. Hay nói cách khác là xóa ký tự đầu tiên của s thôi mà.

Người bí ẩn viết 13:58 ngày 01/10/2018

Cái tên nói lên tất cả mà. Hàm strcpy() dùng để sao chép chuỗi: char * strcpy ( char * destination, const char * source );.

pham hong thai viết 14:02 ngày 01/10/2018

ý của mình ko phải vậy ý mình là s + 1 là chuỗi gì vậy. s+1 thật sự có ý nghĩa là gì, mình chỉ khai báo s vậy s + 1 là sao?

HK boy viết 14:10 ngày 01/10/2018

Mình hiểu câu hỏi của bạn, nhưng để mình trả lời chính xác được cũng khá là khó. Nếu mình sai thì mọi người vào sửa giúp mình nhé.

Trong strcpy(s, s+1), s (hay s + 0) là iterator (phần tử) thứ 0 của s, s + 1 là iterator thứ 1 của s.
Cả dòng này có nghĩa là lấy ra đoạn con từ iterator thứ 0 đến trước iterator thứ 1 của s.

pham hong thai viết 14:05 ngày 01/10/2018

nếu mình cho nó vào vòng lặp thì nó có tăng lên là phần tử thứ 2 thư 3 thứ ++ ko bạn

rogp10 viết 14:12 ngày 01/10/2018

Không nên viết câu này vì dễ bị tổ trác.

pham hong thai viết 14:10 ngày 01/10/2018

cho mình hỏi tổ trác là sao ạ ?

rogp10 viết 14:11 ngày 01/10/2018

strcpy không đảm bảo cho trường hợp chép đè lên chính chuỗi đó.

Bài liên quan
0