Đố vui[C++]

Thảo luận trong 'ACM/Programming' bắt đầu bởi HustReMw, 05/10/17, 04:10 PM.

  1. HustReMw

    HustReMw Moderator Thành viên BQT

    Tham gia: 20/12/16, 05:12 PM
    Bài viết: 304
    Đã được thích: 148
    Điểm thành tích:
    43
    Câu hỏi: Tìm lỗi, giải thích rõ bản chất lỗi và đưa ra hướng giải pháp?

    int _tmain(int argc, _TCHAR* argv[])
    {
    LPCTSTR pszDisk = L"C:\\";
    ULARGE_INTEGER lpFreeBytesAvailable;
    ULARGE_INTEGER lpTotalNumberOfBytes;
    ULARGE_INTEGER lpTotalNumberOfFreeBytes;

    GetDiskFreeSpaceEx(pszDisk,&lpFreeBytesAvailable,&lpTotalNumberOfBytes,&lpTotalNumberOfFreeBytes);
    printf("Available: %u, Free: %u\n", (lpFreeBytesAvailable.QuadPart / (1024 * 1024 * 1024)), (lpTotalNumberOfFreeBytes.QuadPart / (1024 * 1024 * 1024)));
    system("pause");
    return 0;
    }
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  2. scila1996

    scila1996 W-------

    Tham gia: 29/06/13, 11:06 PM
    Bài viết: 21
    Đã được thích: 3
    Điểm thành tích:
    18
    Code khó nhìn quá mode ơi :(
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  3. HustReMw

    HustReMw Moderator Thành viên BQT

    Tham gia: 20/12/16, 05:12 PM
    Bài viết: 304
    Đã được thích: 148
    Điểm thành tích:
    43
    Bạn copy ra notepad ++ nhé. hay để mình đính kèm file. Nó cũng chỉ có vài dòng thôi :D
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  4. scila1996

    scila1996 W-------

    Tham gia: 29/06/13, 11:06 PM
    Bài viết: 21
    Đã được thích: 3
    Điểm thành tích:
    18
    QUADPART là kiểu ulonglong nên chỗ printf phải chỉ định in ra ULONGLONG tương ứng chứ không in ra %u được vì có 4 byte thôi, còn ULONGLONG = 8 byte. Sửa lại như này chắc ok rồi.

    Mã:
    printf("Available: %llu, Free: %llu\n", (lpFreeBytesAvailable.QuadPart / (1024 * 1024 * 1024)), (lpTotalNumberOfFreeBytes.QuadPart / (1024 * 1024 * 1024)));
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  5. HustReMw

    HustReMw Moderator Thành viên BQT

    Tham gia: 20/12/16, 05:12 PM
    Bài viết: 304
    Đã được thích: 148
    Điểm thành tích:
    43
    Chuẩn rồi bạn :D. Free: %u\n nó bằng bao nhiêu và tại sao bạn?
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  6. scila1996

    scila1996 W-------

    Tham gia: 29/06/13, 11:06 PM
    Bài viết: 21
    Đã được thích: 3
    Điểm thành tích:
    18
    nó bằng 0 hoặc ra một giá trị sai, thực ra thì giá trị nó vẫn tính đúng chỉ khác mỗi phần in thì nó chỉ tính 4 byte thay vì 8 byte thôi. Mà như code trên thì nó nhảy địa chỉ kiểu, cái tham số đầu tiên là 8 byte rồi, nhưng 2 cái %u nên là nó in ra một nửa của 8 byte đấy 2 lần chứ không đụng đến cái tham số cuối cùng
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
    HustReMw thích bài này.