2009-03-16 26 views

Trả lời

4

Không, bạn không nên. "Hello world" là chuỗi ký tự không đổi, bạn cần phân bổ bộ nhớ bằng cách sử dụng malloc() trong C hoặc new trong C++ nếu bạn muốn bộ nhớ bạn có thể sửa đổi.

2

Đó là vì bạn đang ghi vào bộ nhớ của một chuỗi ký tự, có thể nằm trong vùng bộ nhớ được bảo vệ.

25

char *str = "Hello World"; là chuỗi const và không thể sửa đổi được. Trình biên dịch là miễn phí để đặt nó vào một vị trí không thể ghi, dẫn đến vụ tai nạn bạn nhìn thấy.

Thay thế khai báo bằng char str[] = "Hello World"; sẽ làm những gì bạn muốn, đặt chuỗi vào một mảng có thể sửa đổi trên ngăn xếp.

+0

gợi ý của bạn sẽ giống với mã hiện tại. –

+0

char str [] so với kết quả char * str trong chuỗi có thể sửa đổi được. – Michael

+0

Dưới đây là một vài tham chiếu đến điều này: http://www.iso-9899.info/wiki/StringsByExample https://www.securecoding.cert.org/confluence/display/cplusplus/STR30-CPP.+Do + không + cố gắng + để + sửa đổi + chuỗi + literals – Michael

3

Như những người khác đã chỉ ra, các chuỗi ký tự có thể được lưu trữ trong vùng chỉ đọc của bộ nhớ. Bạn đang biên dịch với cảnh báo được bật? Bạn sẽ nhận được một cảnh báo về loại bỏ constness của chuỗi chữ.

gì bạn có thể làm thay thế là:

char *str = strdup("Hello, world!"); 
// Modify the string however you want 
free(str); 
Các vấn đề liên quan