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

Đề tài: Xác định độ lớn của 1 biến con trỏ?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    13

    Mặc định Xác định độ lớn của 1 biến con trỏ?

    Mấy bạn cho mình hỏi, khi mình cấp vùng nhớ cho 1 biến (ví dụ kiểu char chẳng hạn) với số phần tử do người dùng nhập vào bằng lệnh:

    Code:
    char *text = new char[n] /* n do người dùng nhập vào */
    thì làm sao để lấy độ lớn của text?
    Mình đã thử lấy bằng lệnh: sizeof(text) nhưng không được.
    Đã được chỉnh sửa lần cuối bởi learnC : 30-04-2009 lúc 04:21 PM.

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Đây là chuổi kí tự. Bạn phải tính độ dài của chuổi, chứ không dùng sizeof được.

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    13

    strlen() sẽ đếm đến khi nào gặp ký tự NULL vậy làm sao lấy hết kích thước bộ nhớ đó được

  4. #4
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Kích thước bộ nhớ do cấp phát động bởi từ khóa new chính là n. Vậy bạn cần gì phải làm thêm gì nữa vì n bạn đã biết rồi. Còn sizeof(text) thì đó là kích thước của biến con trỏ (vơi hệ điều hành 32 bit là 4 byte) thì không thể dùng để biết độ lớn của text

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    46

    kích thước là n*sizeof(char)

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    13

    Mặc định Xác định độ lớn của 1 biến con trỏ?

    thì vẫn biết là thế nhưng ý mình muốn hỏi là ví dụ như mình cấp phát cho biến text đó ở trong 1 thủ tục còn lấy kích thước ở 1 thủ tục khác mà không dùng biến lưu kích thước ấy

  7. #7
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Trích dẫn Nguyên bản được gửi bởi learnC Xem bài viết
    thì vẫn biết là thế nhưng ý mình muốn hỏi là ví dụ như mình cấp phát cho biến text đó ở trong 1 thủ tục còn lấy kích thước ở 1 thủ tục khác mà không dùng biến lưu kích thước ấy
    Lập trình C cổ vẫn cần phải dùng những thủ tục mà phải truyền biến lưu kích thước như vậy bạn à. Bạn có muốn tránh cũng không được.

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    12

    Đây bạn chỉ hiểu đơn giản là mảng kiểu char, bạn icttrack nói đúng đó. Các bạn phía trên cũng đúng luôn. Tuy nhiên môi người lại có một cách nhìn khác nhau. Các bạn ở trên kia thì hiểu rằng char * là kiểu string (chuỗi) còn bạn icttrack hiểu rằng đây là mảng các kí tự.
    Tuy nhiên theo mình bạn icttrack giải thích hợp lý nhất. Và để có thể dễ dàng quản lý như kiểu bạn icttrack nói thì bạn nên đóng gói dữ liệu lại (có thể bằng struct, còn nếu rõ ràng hơn thì đóng gói bằng class, lên cao nữa sẽ lại phân ra thành 2 class, một class chuyên chưa thông tin dữ liệu, 1 class chuyên chứa thông tin phương thức). Tùy level của bạn mà có thể làm theo từng cách khác nhau.

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi learnC Xem bài viết
    Mấy bạn cho mình hỏi, khi mình cấp vùng nhớ cho 1 biến (ví dụ kiểu char chẳng hạn) với số phần tử do người dùng nhập vào bằng lệnh:

    Code:
    char *text = new char[n] /* n do người dùng nhập vào */
    thì làm sao để lấy độ lớn của text?
    Mình đã thử lấy bằng lệnh: sizeof(text) nhưng không được.
    Bạn tham khảo tại đây :
    http://forums.congdongcviet.com/show...7&postcount=30
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Đừng cố làm nữa, ngày xưa tui cũng thử rồi, có được thì chỉ có 1 vài compiler( OS dependence ) ví dụ cách của mèo. Hoặc hàm
    C++ Code:
    1. size_t _msize(
    2.    void *memblock
    3. );
    của Windows.
    - Thứ hai là dễ bị bug out-of-range -> poor style. Nếu để đố vui thì ok nhưng nếu viết application hay project đàng hoàng thì không nên viết như thế. Chẳng có gì sai nếu 1 hàm nhận vào 1 con trỏ func( char* str, unsigned length ) cả. Hoặc dùng std::string vẫn có hàm length() cơ mà.
    - Hoặc đóng gói thàng class như cậu dragon nói cũng là một cách hay.

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

  1. Lỗi chương trình không nhận biến(không return được biến từ public sang main)
    Gửi bởi nang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 02-10-2011, 06:04 PM
  2. Thuộc tính khóa ngoài( tham chiếu) biến mất khi biến đổi từ file XML sang DataTable
    Gửi bởi itmanhieu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-08-2011, 08:02 PM
  3. làm sao để 2 biến Datetime trừ nhau ra biến float or double?
    Gửi bởi robocon1183 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 10-12-2009, 05:11 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