Estoy escribiendo este programa en 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í?
En su ejemplo, no se ha quedado sin memoria, simplemente no ha asignado suficiente memoria para contener la cadena. El resto terminará en un área de memoria que está disponible para el procesador pero que el compilador no conoce. Si bien es posible que no cause un problema con este ejemplo simple, en la práctica puede sobrescribir otras variables y áreas de memoria y debe evitarse.
Además, como Majenko mencionó en un comentario, es posible que desee ver snprintf
cuál es una versión más segura de usar porque también incluye un parámetro para especificar la longitud del búfer. No todos los compiladores PIC lo admiten, pero si el tuyo lo hace, la sintaxis sería:
snprintf(ahimouz, sizeof(ahimouz), "%s %s", we_are_display, "5");
Eso evitaría la posibilidad de que se sobrescriban otras áreas de la memoria, aunque también solo se mostraría h
porque el tamaño de su búfer solo es lo suficientemente grande como para contener un solo carácter más el terminador nulo.
nidin
electropimienta
char ahimouz[2]
achar *ahimouz
, prueba esto.ricardo
clabacchio
DoxyLover
nadie