Я пытаюсь избавиться от некоторых предупреждений компилятора, которые говорят, что strcpy, sprintf и т.д. небезопасны. Я понимаю, почему они небезопасны, но я не могу придумать хороший способ исправить код в стиле С++.
Здесь выдержка из кода:
extList->names[i]=(char *)malloc(length*sizeof(char));
strcpy(extList->names[i],extName); // unsafe
// strncpy(extList->names[i],extName,length); // also unsafe
Здесь сообщение:
C4996: 'strcpy': эта функция или переменная может быть небезопасный. Вместо этого рассмотрите возможность использования strcpy_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. Интерактивную справку.
Я не могу думать о безопасном способе копирования данных на С++, не зная длины копируемого материала. Я знаю, что strlen(), но это также небезопасно, поскольку он предполагает (может быть, неправильно), что данные заканчиваются нулями.
также:
// used to concatenate:
sprintf(extStr,"%s%s",platExtStr,glExtStr);
C4996: 'sprintf': эта функция или переменная может быть небезопасной. Рассматривать используя sprintf_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. Интерактивную справку.
Использование std::string для конкатенации достаточно просто, но тогда мне нужно каким-то образом получить данные в extStr (и не использовать strcpy, lol). Функция string:: c_str() возвращает указатель на un-modifiable data, поэтому я не могу просто установить extStr равным ему. (И я даже не уверен, должен ли указатель c_str() нуждаться в удалении, вызванном на нем позже? Распределяет ли пространство с помощью "new"?)
Какие-нибудь советы по этому поводу? Это часть файла с 10 000 строк, который не принадлежит мне... поэтому я не очень люблю переписывать вещь на С++.