Pregunta sobre la memoria del programa (trabajando no hay suficiente memoria)

2

Estoy escribiendo este programa para un PIC de Microchip.

 char * we_are_display = "hello";
 char ahimouz[2];
 sprintf(ahimouz,"%s %s",we_are_display,"5");
 WriteStringToLCD(ahimouz);

Este programa funciona a pesar de que la memoria asignada a la matriz ahimouz es de solo 2 bytes. ¿Por qué es así?

    
pregunta Makhlouf GHARBI

1 respuesta

6

En su ejemplo, no está sin memoria, simplemente no ha asignado suficiente memoria para mantener la cadena. El resto terminará en un área de memoria que está disponible para el procesador, pero el compilador no lo sabe. Si bien no puede causar problemas con este sencillo ejemplo en la práctica, puede sobrescribir otras variables y áreas de memoria y debe evitarse.

También como Majenko mencionó en un comentario, es posible que desee echar un vistazo a snprintf , que es una versión más segura, ya que también incluye un parámetro para especificar la longitud del búfer. No todos los compiladores de PIC lo admiten, pero si el suyo lo hace, la sintaxis sería:

snprintf(ahimouz, sizeof(ahimouz), "%s %s", we_are_display, "5");

Eso evitaría la posibilidad de que se sobrescribieran otras áreas de memoria, aunque también mostraría h porque el tamaño del búfer es lo suficientemente grande como para contener un solo carácter más el terminador nulo.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas