none
Ошибка код C4996 RRS feed

  • Вопрос

  • Здравствуйте, изучаю Win32 API, делаю все как в примере - (в примере используется VS 6, я пользуюсь VS Community 2015)

    выдает ошибку:

    Ошибка C4996 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Hello2 c:\users\георгий\documents\visual studio 2015\projects\universalbase\hello2\kwnd.cpp

    вот сам код:

    ///////////////////////////////////////////////////////////////////////////////
    /// KWnd.cpp                                                                ///
    ///////////////////////////////////////////////////////////////////////////////
    
    #include "KWnd.h"
    
    KWnd::KWnd(LPCTSTR windowName, HINSTANCE hInst, int cmdShow,
    	LRESULT(WINAPI *pWndProc)(HWND, UINT, WPARAM, LPARAM),
    	LPCSTR menuName, int x, int y, int width, int height,
    	UINT classStyle, DWORD windowStyle, HWND hParent)
    {
    	char szClassName[] = "KWndClass";
    
    	wc.cbSize = sizeof(wc);
    	wc.style = classStyle;
    	wc.lpfnWndProc = pWndProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hInstance = hInst;
    	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wc.lpszMenuName = menuName;
    	wc.lpszClassName = szClassName;
    	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    	// Регистрируем класс окна
    	if (!RegisterClassEx(&wc)) {
    		char msg[100] = "Не могу зарегестрировать class: ";
    		strcat(msg, szClassName);
    		MessageBox(NULL, msg, "Ошибка", MB_OK);
    	}
    
    	// Создаем окно
    	hWnd = CreateWindow(szClassName, windowName, windowStyle,
    		x, y, width, height, hParent, HMENU(NULL), hInst, NULL);
    
    	if (!hWnd) {
    		char text[100] = "Не могусоздать окно: ";
    		strcat(text, windowName);
    		MessageBox(NULL, text, "Ошибка", MB_OK);
    		return;
    	}
    
    	// Показываем окно
    	ShowWindow(hWnd, cmdShow);
    }

    Пожалуйста Подскажите что не так сделал?

    31 октября 2015 г. 18:19

Ответы

  • Так написано же... Я переведу:

    Использовать функцию strcat небезопасно. Замените ее функцией strcat_s. 

    Таким образом вам надо убрать вызовы strcat и заменить ее на вызовы strcat_s с нужными параметрами.

    Другой вариант - определить макро CRT_SECURE_NO_WARNINGS и тогда вы сможете использовать небезопасные функции как это делают в старинных примерах почти 20 летней давности.

    Еще одна проблема с древними примерами: ваша программа будет иметь проблемы с национальными алфавитами так как она не поддерживает Юникод. Возможно следует поискать примеры поновее.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа МГС 31 октября 2015 г. 18:41
    31 октября 2015 г. 18:35
    Модератор

Все ответы

  • Так написано же... Я переведу:

    Использовать функцию strcat небезопасно. Замените ее функцией strcat_s. 

    Таким образом вам надо убрать вызовы strcat и заменить ее на вызовы strcat_s с нужными параметрами.

    Другой вариант - определить макро CRT_SECURE_NO_WARNINGS и тогда вы сможете использовать небезопасные функции как это делают в старинных примерах почти 20 летней давности.

    Еще одна проблема с древними примерами: ваша программа будет иметь проблемы с национальными алфавитами так как она не поддерживает Юникод. Возможно следует поискать примеры поновее.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа МГС 31 октября 2015 г. 18:41
    31 октября 2015 г. 18:35
    Модератор
  • Спасибо, помогло, я самоучка и пользуюсь литературой которую смог найти, если есть возможность подскажите какую нибудь которая будет актуальной а не древней.
    31 октября 2015 г. 18:43
  • К сожалению я не знаком с изданиями на русском языке, но любая книга изданная в этом десятилетии скорее всего подойдет. Конечно есть шанс что там не будет ничего про окна и т.п. из за тенденции делать все это другими средствами.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    31 октября 2015 г. 19:00
    Модератор