TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Diego E. en 24 de Abril de 2009, 18:22:33
-
Hola grupo
hay alguna forma de poner todos los componentes de un array en ceros "limpiarlos", no tener que limpiar uno tras otro.
eje: char variable[10] //quiero limpiar todos los componentes de esta variable matriz
gracias.
-
en la biblioteca string.h existe una funcion q se llama memset()
void * memset ( void * ptr, int value, size_t num );
ptr es el puntero a tu arreglo, value es el valor con el cual lo queres llenar (en tu caso 0), y num es el tamaño en bytes de tu arreglo, q podes obtenerlo haciendo un sizeof()
memset(variable, 0, sizeof(variable));
saludos!!!
-
La directiva #zero_ram pone a ceros toda la memoria que declares en tu programa. Solo lo hace al empezar la ejecución del programa.
Todo lo anterior usando CCS.
-
gera, migsantiago, gracias por las respuetas,
probé con ambas y funcionan correstamante, la diferencia es que zero_ram borra todo y con memset afecto parciales, de todos modos es lo que necesito.
mil gracias.
-
Cuando quieras!
Me parece q cuando tenga un tiempito voy a hacer un tutorial o una guia sobre manejo de strings en C. Preguntas como estas son muy comunes jeje.
-
zero_ram pone a 0 todas las variables declaradas dentro del main (locales) y las que estan fuera (globales) ?
Gracias.
-
Tambien.
-
Vagamente recuerdo que toda variable global siempre se inicializa a cero automáticamente al iniciar el programa. Las que sí se deben inicializar a cero manualmente son todas las demás.
¿Alguien podría confirmarlo?
-
Por lo menos en el ANSI C, todas las variables globales no inicializadas ( ejemplo int Pepe; ) se deben colocar a 0 antes de llamar al main, las globales inicializadas ( ejemplo int Juan = 5; ) deben tener el correcto valor antes de llamar al main. Con respecto a la pregunta original yo recomendaria usar el memset es ANSI y portable.
Saludos !
-
Vagamente recuerdo que toda variable global siempre se inicializa a cero automáticamente al iniciar el programa. Las que sí se deben inicializar a cero manualmente son todas las demás.
¿Alguien podría confirmarlo?
en ccs y con static, si
http://www.todopic.com.ar/foros/index.php?topic=18647.msg135680#msg135680
-
A mi me inicializa todas las variables globales a cero con #zero_ram. Casi no uso variables locales .... solo los contadores pero los uso en ciclos for, por lo que esos casi siempre comienzan en ceros ... :P
Saludos
-
Pero el usar static tiene otra consecuencia por decir algo. Es decir, las variables (globales o locales) quedan almacenadas para siempre en una poscicion fija cuando se usa static no? Eso no podria causar un aumento de la RAM o algo parecido?
-
Pero el usar static tiene otra consecuencia por decir algo. Es decir, las variables (globales o locales) quedan almacenadas para siempre en una poscicion fija cuando se usa static no? Eso no podria causar un aumento de la RAM o algo parecido?
según Don Diego, sip.
http://www.todopic.com.ar/foros/index.php?topic=18647.msg135732#msg135732
-
Exactamente, se reserva el lugar en la memoria. Son variables que a diferencia de las globales solo pueden ser utilizadas dentro de la función. Aquí (http://www.todopic.com.ar/foros/index.php?topic=28464.0)se trato el tema
Saludos!