Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Lỗi khi thay đổi giá trị trong chuỗi

  1. #1
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Mặc định Lỗi khi thay đổi giá trị trong chuỗi

    Các bạn thân mến!
    Mình mới học lập trình C nên còn nhiều bỡ ngỡ. Mình có đọc một ví dụ về sử dụng con trỏ hằng và khi biên dịch chương trình báo lỗi "access violation", mong các bạn giúp đỡ
    C Code:
    1. char * terry = "hello"; // declaration and assignment
    2. terry[4] = '!'; // modify the 4-th element of the string
    3. printf("%s",terry);
    Mời các bạn ghé thăm blog cá nhân của tôi

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trời ạ, tiền bối có ý gì thế Tiền bối đùa ác quá
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Mình không có ý gì thật mà! Mình mới học C được có nửa tuần thôi, đọc đến phần này làm theo ví dụ của họ thì thấy compiler báo lỗi mà không biết tại sao nên mới hỏi mọi người.
    Mời các bạn ghé thăm blog cá nhân của tôi

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    ^^ Tiền bối ơi là tiền bối , đừng nên đùa vậy chứ
    E nghĩ tiền bối đủ minh mẫn để biết mình đang làm gì và có ý gì
    Đã được chỉnh sửa lần cuối bởi clchicken : 01-12-2011 lúc 08:31 PM.
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Lý do rất giản dị. Bởi vì...
    Ủa mà mình mới học tiếng Anh có 1 giờ thôi, đâu có hiểu nó báo lỗi như thế nghĩa là gì. Trả lời là ngông cuồng.
    Đã được chỉnh sửa lần cuối bởi VoTichSu : 01-12-2011 lúc 11:19 PM.

  6. #6
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Mặc định Lỗi khi thay đổi giá trị trong chuỗi

    Mình hỏi nghiêm túc, không có ý gì cả. Nếu các bạn không tin thì thử compile hộ mình xem có bị lỗi gì không!
    Mời các bạn ghé thăm blog cá nhân của tôi

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    46

    Chuỗi hằng thì bạn không thể dùng phép gán được, cách tốt nhất khai báo chuỗi kiểu này là phải tường minh dùng const char *.

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    38

    theo ngu kiến của mình là do con trỏ char *p chưa đc cấp phát bộ nhớ nên khi ta cho p trỏ đến string bất kỳ , string này sẽ đc lưu ở 1 bộ nhớ (tạm thời + đc bảo vệ) nào đó, do đó string mang tính chất read-only và máy báo lỗi khi ta tìm cách thay đổi string
    còn nếu trước đó ta cấp phát bộ nhớ cho p hay dùng con trỏ tĩnh dạng p[] thì lỗi trên ko xảy ra.

    p.s : mà theo sách vở giải thích thì là do
    char *p = "string " -> con trỏ trỏ tới hằng nên ko thể thông qua con trỏ để thay đổi giá trị của hằng đc trỏ đến.
    Đã được chỉnh sửa lần cuối bởi tuanc : 03-12-2011 lúc 06:48 AM.

  9. #9
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Đúng rồi, cảm ơn mọi người.
    Lý do ở đây là do con trỏ terry ở trên đã trỏ tới một "chuỗi hằng", tức là trỏ đến một vùng nhớ chỉ đọc. Mọi thao tác nhằm làm thay đổi nội dung của vùng nhớ chỉ đọc (read-only) này sẽ dẫn đến lỗi
    Mời các bạn ghé thăm blog cá nhân của tôi

Các đề tài tương tự

  1. Trả lời: 9
    Bài viết cuối: 16-12-2012, 10:54 AM
  2. Hàm tìm một chữ cái trong chuỗi và thay thế chữ cái đó bằng chữ cái khác là hàm nào?
    Gửi bởi tiphudianxin12 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 04-10-2011, 01:39 PM
  3. Lập trình C Thay thế chuỗi s1 trong chuỗi s bằng chuỗi s
    Gửi bởi duytue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 23-09-2011, 04:16 PM
  4. thay thế chuỗi con thứ i trong chuỗi mẹ bằng 1 chuỗi khác
    Gửi bởi nhat1811 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 06-08-2011, 08:25 AM
  5. thay đổi ảnh khi di chuột đến trong ASP.NET?
    Gửi bởi khanhthuy trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 27-03-2009, 01:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn