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

Đề tài: số kí tự tối đa của hàm gets()

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định số kí tự tối đa của hàm gets()

    Mình xin hỏi câu lệnh gets() sẽ cho phép nhập tối đa 127 kí tự đúng không vậy?
    Vậy thì fscanf("%[^\n]",...) thì sao?
    Ai biết thì chỉ giùm mình nha.
    thanks!

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi tanglung117 Xem bài viết
    Mình xin hỏi câu lệnh gets() sẽ cho phép nhập tối đa 127 kí tự đúng không vậy?
    Tin này ở đâu ra thế? Nếu nguồn online, bạn có thể cho cái link không?

    Mình lâu rồi không viết bằng C và càng không dùng gets(). Nhưng nếu trí nhớ mình không lầm, không có hạn chế nào như thế. Chính sự không hạn chế đó đã khiến gets() trở thành 1 hàm nguy hiểm, đến mức vô dụng.

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Tin này ở đâu ra thế? Nếu nguồn online, bạn có thể cho cái link không?

    Mình lâu rồi không viết bằng C và càng không dùng gets(). Nhưng nếu trí nhớ mình không lầm, không có hạn chế nào như thế. Chính sự không hạn chế đó đã khiến gets() trở thành 1 hàm nguy hiểm, đến mức vô dụng.
    Đao ,kiếm ,.... ko nguy hiểm. Người cầm nó mới nguy hiểm.


    mong bạn hiểu ý mình...
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Đao ,kiếm ,.... ko nguy hiểm. Người cầm nó mới nguy hiểm.


    mong bạn hiểu ý mình...
    Mình hiểu. Điều bạn nói dĩ nhiên là đúng nếu đao kiếm có chuôi (cán) để cầm. Nhưng nếu do một nhầm lẫn của người thợ rèn mà đao kiếm không có chuôi, cầm vào đâu cũng thấy lưỡi thì phải nói là đao kiếm nguy hiểm chứ.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    1. Cái kiếm get() nó được rất nhiều người , công ty Borland kiểm duyệt qua nhiều đời TC, nhiều người đã từng cầm...... Nó có chuôi bạn à.


    2. trả giá...

    từ thợ rèn cùi lên thợ rèn pro thì phải trả giá....

    có rất nhiều cách để trả giá....

    cách tốt nhất : rèn thật nhiều, thật nhiều.....
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Mặc định số kí tự tối đa của hàm gets()

    Mình chép 1 đoạn wikipedia nói về gets().

    --------------------- Nguồn : http://en.wikipedia.org/wiki/Gets --------------------
    gets is a function in the C standard library, declared in the header file stdio.h, that reads a line from the standard input and stores it in a buffer provided by the caller. It might be implemented as follows (using getchar):

    Code:
    char *gets(char *s)
    {
        int i, k = getchar();
        /* Return NULL if no input is available */
        if (k == EOF) return NULL;
        /* Read and store characters until reaching a newline or end-of-file */
        for (i = 0; k != EOF && k != '\n'; ++i) {
            s[i] = k;
            k = getchar();
            /* If a read error occurs, the resulting buffer is not usable. */
            if (k == EOF && !feof(stdin)) return NULL;
        }
        /* Null-terminate and return the buffer on success.
           The newline is not stored in the buffer. */
        s[i] = '\0';
        return s;
    }
    As indicated by the code above, gets does not perform bounds checking on the input, and therefore is a potential source of buffer overflow exploits in programs that use it. Most gets man pages contain the warning "Never use gets"[1] precisely because of this design flaw.

    While the use of gets is not officially deprecated by any C standard, its use is discouraged; it is left in the C89 and C99 standards for backward compatibility. Some development tools, such as lint, will emit warnings when code using gets is linked. The fgets(..., stdin) function is a frequently suggested substitute.
    --------------------- Nguồn : http://en.wikipedia.org/wiki/Gets --------------------

    Như vậy, vấn đề lại nằm ở chỗ "cây kiếm không chuôi" gets() này đã được thiết kế và giữ bản quyền thiết kế bởi một nhà tạo mẫu tồi: chuẩn ngôn ngữ C. Nên thợ rèn chỉ có 2 cách để chọn lựa: rèn theo đúng thiết kế, và kết quả là được 1 cây kiếm không chuôi; hoặc tự tiện cải biên thiết kế, rèn ra loại vũ khí khác, ví dụ, một cây dao găm. Cây dao găm này có thể có chuôi, đúng. Nhưng nó không phải là gets().

    Thợ rèn nào cũng chỉ có 2 cách đó. Intel, Microsoft, GNU,... đều phải làm thế. Borland cũng không phải là ngoại lệ.

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    cái này mình có đọc rồi.
    ở mức độ nào đó . thanh kiếm này vẫn xài được mà bạn. nó nguy hiểm thì mình dùng nó 1 cách khéo léo.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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