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

Đề tài: thắc mắc con trỏ và mảng

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

    Wink thắc mắc con trỏ và mảng

    các bạn cho tui hỏi, tại sao mà mình đã khai báo con trỏ hay một cái mảng với một độ dài cố định rồi, nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn? ví dụ:
    void main()
    {
    //....
    char str[3];
    flushall();
    printf("moi nhap chuoi: ");
    gets(str);
    puts(str);
    //....
    }
    khi đó mình nhập một chuỗi có độ dài lớn hơn 3 kí tự thì chương trình vẫn gets và puts rất ok, kô thiếu một chữ, như vậy là sao? ý nghĩa của số 3 là ji?
    ko có việc gì khó, chỉ sợ... tiền ko nhiều...

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

    Chuỗi nhập vượt quá kích thước thì trong bc31 ko bị báo lỗi còn trong mấy compiler khác là báo lỗi hoặc sẽ bị crash luôn đó.
    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.

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    336

    ý nghĩa của số 3 là ji?
    cấp phát cho char *str 3 ô nhớ

    nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn?
    Thầy mình nói C là ngôn ngữ giả định người lập trình biết mình đang làm cái gì nên nó rất dễ tính.
    Nhưng dễ dãi ko có nghĩa là an toàn, bạn thử nhập khoảng 50 chữ khi get(str) kia xem chuyện gì xảy ra khi kết thúc chương trình :-"
    code ra gió bão

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    các bạn cho tui hỏi, tại sao mà mình đã khai báo con trỏ hay một cái mảng với một độ dài cố định rồi, nhưng khi nhập vào và xuất ra thì độ dài của nó có vẫn có thể lớn hơn? ví dụ:
    Theo hiểu biết của mình, khi khai báo nó cấp phát cho 1 vùng nhớ, nói như vậy không hẳn đúng, đơn giản là nó sẽ kiếm một chỗ còn trống đủ để bạn vứt cái đống bạn muốn vào, nhưng có những lúc cái chỗ đó rộng hơn bạn cần vì vậy khi cho thừa một chút vào đó cũng được, nhưng nhiều quá nó sẽ báo lỗi (đó là với các compile thoải mái), với cái chặt hơn có thể vì sợ mất giữ liệu mà nó kiểm soát chặt hơn lượng bộ nhớ sử dụng.

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

    - bc3.1 cho nó vào trash-can.
    - Trong C++ dùng cin.getline( str, size_of_string ). gets() là 1 trong những API tồi nhất của C, hãy để nó vào dĩ vãng !
    - Hoặc dùng std::string.

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