Cách khắc phục lỗi use _crt_secure_no_warnings

  1. Khắc phục lỗi lưu file dùng fopen()
    Mình dùng hàm fopen() trong FMC nhưng nó báo lỗi

    "error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\secret\desktop\chemgraphics\chemgraphics\ chemgraphicsview.cpp" mình đã xử lý bằng cách defined

Mã:

define _CRT_SECURE_NO_DEPRECATE

nhưng vẫn không được. Xin mọi người giúp đỡ. đây là đoạn code trong Viewclass của mình.

Mã:

void CChemGraphicsView::OnFileExport() > { > // TODO: Add your command handler code here > CString szFilter; > szFilter.LoadString (IDS_WINDOWS_BITMAP_FILES); > //Hien thi Save Dialog theo Path name > CFileDialog dlg (FALSE, DEFAULT_BITMAP_FILE_EXTENSION, DEFAULT_BITMAP_FILE_NAME, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL); > if (dlg.DoModal() == IDOK) > { > CString szPathName = dlg.GetPathName(); > //Tao file moi de ghi vao > FILE pFile = fopen ( szPathName, "wb"); //error here >

if (pFile == NULL) > { > AfxMessageBox (IDS_FILE_CREATE_ERROR_MESSAGE); > return; > } > BITMAPFILEHEADER bmfh; > int nBitsOffset = sizeof (BITMAPFILEHEADER) + BMIH.biSize; > LONG lImageSize = BMIH.biSizeImage; > LONG lFileSize = nBitsOffset + lImageSize; > bmfh.bfType = 'B' + ('M'<<8); > bmfh.bfOffBits = nBitsOffset; > bmfh.bfSize = lFileSize; > bmfh.bfReserved1 = bmfh.bfReserved2 = 0; > //write the bitmap file header > UINT nWrittenFileHeaderSize = fwrite (&bmfh, 1, sizeof (BITMAPFILEHEADER), pFile); > //And then the bitmap info header > UINT nWrittenInfoHeaderSize = fwrite (&BMIH, 1, sizeof (BITMAPINFOHEADER), pFile); > //Write the image data itseft -- hien thi du lieu ve > UINT nWrittenDIBDataSize = fwrite (m_pDrawingSurfaceBits, 1, lImageSize, pFile); fclose(pFile); > } > }

View more random threads:

Chuyển chữ thành số như nào? Xử lý tín hiệu số trong lập trình C Code di chuyển 1 đối tượng bằng bàn phím! Xem cái hàm này giùm mình tí! Bài tập về cấu trúc struct cần mọi ngưởi giúp đỡ Nhờ các bạn giúp mình ý nghĩa các hàm trong bài. lỗi code đồ họa may ban ho tro mih bai tim so chinh phuong <=n nha miih k hiu ve bai nay lam tai mih moi hoc.... mảng_contrỏ
  • Bạn nào xem dùm mềnh với .mình làm xong mà ko chạy đc .hức hức ---

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  • BB code đang Bật
  • Smilies đang Bật
  • code đang Bật
  • code is Bật
  • HTML code đang Tắt

Nội quy - Quy định

Error C4996 'ctime': This function or variable may be unsafe. Consider using ctime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ReadData c:\users\asus\desktop\readdata\readdata\readdatadlg.cpp 712

Cho mình hỏi mục đích của _CRT_SECURE_NO_WARNINGS trong Visual Studio là gì? Trong các phiên bản VS 2012 trở về trước, nó chỉ cảnh báo rằng không nên sử dụng hàm scanf, fscanf, ...v.v nhưng trong VS 2017 thì lại báo lỗi luôn và không thể thực thi chương trình.

'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Nếu mình thêm dòng


# define _CRT_SECURE_NO_DEPRECATE

hoặc


# pragma warning(disable:4996)

thì mọi thứ trở lại bình thường, mình có cần phải để ý tới chuyện này không hay mặc định bỏ qua?

_CRT_SECURE_NO_WARNINGS là gì?

_CRT_SECURE_NO_WARNINGS trong Visual Studio C/C++ chỉ là một cảnh báo hoặc báo lỗi của riêng trình biên dịch Visual Studio với hàm ý muốn nói với bạn rằng các hàm đọc dữ liệu như scanf, fscanf, gets, ...v.v là không an toàn bởi vì nó có thể gây tràn bộ nhớ đệm khi đọc dữ liệu nhập từ người dùng.

Bởi vì sao không an toàn? Giả sử bạn khai báo một biến chuỗi str chỉ lưu được 10 ký tự, trong khi đó người dùng nhập vào nhiều hơn 10 ký tự, ví dụ như 15 ký tự chẳng hạn, vấn đề tràn bộ nhớ đệm sẽ xảy ra, có thể trong lúc phát triển phần mềm bạn nhập vào 1 input hợp lệ nhưng đừng bao giờ tin tưởng vào người dùng, input của họ có thể là bất cứ thứ gì.

Nó có quan trọng hay không?

Không quan trọng, thậm chí còn gây phiền hà cho người lập trình (ví dụ như mình), bạn có thể chọn bỏ qua bằng cách thêm vào dòng mã nguồn ở trên cùng của chương trình,


# define _CRT_SECURE_NO_DEPRECATE

hoặc


# pragma warning(disable:4996)

Nhưng khi chọn bỏ qua, hãy đảm bảo rằng bạn đang biết rõ hoặc ước lượng tốt các giá trị input đọc vào trong chương trình của bạn là gì.

Nếu bạn không bỏ qua mà sử dụng các hàm scanf_s, fscanf_s, ... thay thế theo đề nghị của trình biên dịch Visual Studio thì bạn nên lưu ý một điều rằng các hàm scanf_s, fscanf_s, ... không phải là những hàm nằm trong định nghĩa chuẩn của C mà là các hàm riêng của Visual Studio, điều này có nghĩa là mã nguồn của bạn chỉ chạy được trên Microsoft Windows mà không chạy được trên Linux hoặc các trình biên dịch C/C++ khác.

đã đăng 5.0 năm trước bởi

đã bổ sung 5.0 năm trước bởi

Cách khắc phục lỗi use _crt_secure_no_warnings

Bạn chưa đăng nhập, vui lòng đăng nhập để thêm câu trả lời.