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.

Tao Không Ngu. viết 14:16 ngày 01/10/2018

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.

Nam Phan viết 14:19 ngày 01/10/2018

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.

Tao Không Ngu. viết 14:26 ngày 01/10/2018

Hi Nam Phan.
http://www.cplusplus.com/reference/cstring/memmove/

Nam Phan viết 14:20 ngày 01/10/2018

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 ?

Tao Không Ngu. viết 14:22 ngày 01/10/2018

Hi Nam Phan.
Lỗi ở đâu thì sửa ở đấy. Biết lỗi rồi còn hỏi. @_@!

Nam Phan viết 14:20 ngày 01/10/2018

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 @@?

Tao Không Ngu. viết 14:19 ngày 01/10/2018

Hi Nam Phan.
Bạn chắc chứ ???

Nam Phan viết 14:16 ngày 01/10/2018

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

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

Triệt để nhất là kiếm thư viện string ngoài nó đàng hoàng hơn

Nam Phan viết 14:16 ngày 01/10/2018

là sao bạn ? mình đang học dùng hàm memmove

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

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

Bài liên quan
0