01/10/2018, 12:11
Hàm memmove rất khó hiểu
#include <stdio.h>
#include <string.h>
int main()
{
char s[]="nam123";
char sub[]="theanh";
int lent=strlen(sub);
memmove(s+3+lent,s+3,lent);
strncpy(s+3,sub,lent);
printf("%s", s);
return 0;
}
hàm như trên khi chạy có lỗi ạ. em muốn lồng thành namtheanh123. nhưng không hiểu sao chạy lại bị stopped working. Cao nhất nào vào chỉ ra vấn đề + giảng về hàm memmove được với không ạ. em search google đọc nhiều nguồn mà vẫn thấy không được rõ ràng.
Bài liên quan
Hi Nam Phan.
Bạn lỗi i khtruy cập vùng nhớ không được phép. Dọc lại tài liệu để hiểu rõ hơn.
bác cho mình tài liệu được không ?
Thực sự mình tìm nguồn về memmove này 2 ngày rồi mà không tìm được nguồn đâu dễ hiểu.
Theo mình hiểu ý bác liệu có phải khi mình dịch hết phần đoạn kia về bên phải thì đè vào vùng địa chỉ chưa đc cấp phát nên sinh ra lỗi ? Nếu thế thì cho mình xin hướng khắc phục tình trạng này được không ạ? Còn không thì bác giải thích lại ạ mình chưa hiểu.
Hi Nam Phan.
http://www.cplusplus.com/reference/cstring/memmove/
Mình đọc đã hiểu được như thế này : Mình đã di chuyển cả mảng đấy lên 1 vùng địa chỉ chưa được cấp phát và tràn bộ nhớ. Nhưng mình muốn thảo luận rằng có cách nào khắc phục được tình trạng này không ?
Hi Nam Phan.
Lỗi ở đâu thì sửa ở đấy. Biết lỗi rồi còn hỏi. @_@!
Minhh chưa tìm ra hướng sửa bạn ơi. Ví dụ mình tạo 1 con trỏ rồi cho người dùng nhập vào đấy. Sau đó mình muốn chèn thêm vào thì rõ ràng kiểu gì cũng bị tràn @@?
Hi Nam Phan.
Bạn chắc chứ ???
@@ ví dụ mình tạo char s[]=“nam123” như trên kia thì rõ ràng là mình không có cách nào chèn được? nên mình xin giải pháp.
Triệt để nhất là kiếm thư viện string ngoài nó đàng hoàng hơn
là sao bạn ? mình đang học dùng hàm memmove
Bạn tạo vậy thì mảng chỉ có 6 slot thôi nên chèn vào nữa sẽ không đủ chỗ.