01/10/2018, 15:36

Con trỏ trong string

Code dưới này mình muốn gán *x = x[1] nhưng chạy thì bị stop working.
Nếu vô hiệu hóa dòng code đó thì nó chạy được, in ra ok, mà in xong thì cmd bị đơ khoảng 3s, như bị tràn ấy
Mn giải thích hộ mình với. Cám ơn

#include <stdio.h> 
#include <string.h> 
#include <conio.h>
int main()
{
	int i, n;
	char *x = "helloWorld";
	n = strlen(x);
	*x = x[1]; 
	for (i = 0; i < n; i++)
	{
		printf("%s ", x);
		x++;
	}
	printf("
");

	delete x;
	_getch();
	return 0;
}
明玉 viết 17:49 ngày 01/10/2018

Bạn nhớ nhé, tất cả các string literal (như cái “helloWorld”) đều được đưa vào section .rdata trong executable file. Vùng này được đặt cờ “read only”.
Bạn viết:

*x = x[1]; 

Chạy đến đây, hệ điều hành ném Access Violation Exception (vì bạn ghi dữ liệu vào vùng read only)
Và:

delete x;

Cũng thế luôn.

Hello World viết 17:49 ngày 01/10/2018
Cám ơn bạn :)
Bài liên quan
0