Estoy tratando de deshacerme de algunas advertencias del compilador que dicen que strcpy, sprintf, etc. no son seguros. Entiendo por qué no son seguros, pero no puedo pensar en una buena manera de corregir el código, en un estilo C++.Cómo deshacerse de advertencias/errores "inseguros" en Visual Studio (strcpy, sprintf, strdup)
Aquí está un extracto del código:
extList->names[i]=(char *)malloc(length*sizeof(char));
strcpy(extList->names[i],extName); // unsafe
// strncpy(extList->names[i],extName,length); // also unsafe
Aquí está el mensaje:
C4996: 'strcpy': Esta función o variable pueden ser inseguro. Considera usar strcpy_s en su lugar. Para desactivar la desactivación, use _CRT_SECURE_NO_WARNINGS. Consulte la ayuda en línea para obtener detalles.
No puedo pensar en una forma segura de copiar los datos en C++ sin saber la longitud de las cosas para copiar. Sé que hay strlen(), pero eso también es inseguro ya que supone (tal vez incorrectamente) que los datos están terminados en nulo.
También:
// used to concatenate:
sprintf(extStr,"%s%s",platExtStr,glExtStr);
C4996: 'sprintf': Esta función o variable pueden ser inseguros. Considere usando sprintf_s en su lugar. Para desactivar la desactivación, use _CRT_SECURE_NO_WARNINGS. Consulte la ayuda en línea para obtener detalles.
Usar std :: string para concatenar es bastante fácil, pero luego necesito obtener los datos en extStr de alguna manera (y no usando strcpy, lol). La función string :: c_str() devuelve un puntero a datos no modificables, por lo que no puedo simplemente establecer extStr igual a él. (Y ni siquiera estoy seguro de si el puntero c_str() necesita eliminar invocó más tarde? ¿Se asigna espacio usando "nuevo"?)
¿Algún consejo sobre esto? Esto es parte de un archivo de 10,000 líneas que no es mío ... así que no estoy exactamente interesado en volver a escribirlo en C++.
Probablemente deba mencionar qué sistema operativo, entorno de programación y compilador está utilizando. –
Y si es un estudio visual/win32, las advertencias del compilador incluso le dicen cómo apagarlas. – nos
¿10,000 líneas de código en un archivo? Sugeriría una refactorización y luego me preocuparía limpiar las advertencias. –