Cada vez que trato de usar sprintf() mientras codifico en C, recibo una advertencia que dice:
"advertencia: la directiva '%s' escribe hasta 49 bytes en una región de tamaño 39 [-Wformat-overflow=]"
También está produciendo una nota que dice:
"nota: salida de 'sprintf' entre 13 y 62 bytes en un destino de tamaño 50 62 | sprintf(msg,"fopen-ing "%s"",data_file);"
A continuación, doy una parte de mi código, principalmente donde recibo esta advertencia.
char data_file[50]; // Global void initialize_from_data_file() { FILE *fpS; if((fpS = fopen(data_file,"r")) == NULL) { char msg[50]; sprintf(msg,"fopen-ing \"%s\"",data_file); perror(msg); exit(1); } ... }Como estoy usando este idioma recientemente, no puedo entender cómo eliminar esta advertencia.
Le advierte que el búfer de destino para sprintf podría no ser lo suficientemente grande para contener la cadena que desea colocar en él. Si data_file tiene más de 40 caracteres, sprintf escribirá más allá del final de la matriz msg .
Haga que el msg sea lo suficientemente grande como para contener la cadena que iría en él:
char msg[70]; Sin embargo, hay otro problema. Dado que llama a sprintf justo antes de llamar a perror , este último informará el estado de error de la llamada sprintf , no la llamada fopen .
Así que no uses sprintf en absoluto en este caso y usa strerror para obtener la cadena de error:
fprintf(stderr,"fopen-ing \"%s\": %s",data_file,strerror(errno));