elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Inicializar cadena de caracteres en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Inicializar cadena de caracteres en lenguaje C.  (Leído 6,236 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Inicializar cadena de caracteres en lenguaje C.
« en: 12 Mayo 2016, 21:38 pm »

Hola, gente.
Después de declarar una cadena de caracteres en C ¿se puede inicializar todos los elementos a cero, sin tener que realizarlo a través de un bucle?. -

Saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #1 en: 12 Mayo 2016, 22:19 pm »

Con memset de string.h


En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #2 en: 12 Mayo 2016, 22:52 pm »

Si en verdad quieres evitar los bucles puedes:

Código
  1. char cadena[10] = "";

El cual es equivalente a

Código
  1. char cadena[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #3 en: 12 Mayo 2016, 23:17 pm »

Después de declarar una cadena de caracteres en C

Si en verdad quieres evitar los bucles puedes:

Código
  1. char cadena[10] = "";

El cual es equivalente a

Código
  1. char cadena[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

Creo que no es necesariamente equivalente, pero puede funcionar.

Puede servir la siguiente función

Código

Código
  1. memset(cadena,0,longitud);

Hice el siguiente código para mostrar la función

Código
  1. #include<stdio.h>
  2. #include<stdarg.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6. void debug(char*s,unsigned char *ptr,unsigned int l,...);
  7.  
  8. int main() {
  9. char c1[10] = "";
  10. char c2[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //No es dinamica pero esta en 0s
  11. char *c3 = malloc(10); //Puede estar en 0s
  12. char *c4 = calloc(10,1); //Ya lo inicializa en 0s
  13. char c5[10] = "Texo Texto";
  14.  
  15. debug("c1\t",c1,10);
  16. debug("c2\t",c2,10);
  17. debug("c3\t",c3,10);
  18. debug("c4\t",c4,10);
  19. debug("c5\t",c4,10);
  20. memset(c3,'A',10);
  21. debug("-c3\t",c3,10);
  22. memset(c3,0,10);
  23. debug("-c3\t",c3,10);
  24. memset(c5,0,10);
  25. debug("-c5\t",c5,10);
  26. }
  27.  
  28. void debug(char *s,unsigned char *ptr,unsigned int l,...) {
  29. va_list args;
  30. int i = 0;
  31. int len = strlen(s)*20;
  32. char *buffer;
  33. buffer = calloc(len,sizeof(char));
  34. va_start(args, l);
  35. vsprintf(buffer,s, args);
  36. printf("%s: 0x%x ",buffer,ptr);
  37. while(ptr && i < l) {
  38. printf("%.2x",ptr[i++]);
  39. }
  40. printf("\n");
  41. va_end(args);
  42. memset(buffer,0,len);
  43. free(buffer);
  44. }
  45.  

La función debug (propia) para mostrar el estado de la memoria

Salida

Código:
c1      : 0x23fe30 00000000000000000000
c2      : 0x23fe20 00000000000000000000
c3      : 0x621390 e05a6200000000005001
c4      : 0x6213b0 00000000000000000000
c5      : 0x6213b0 00000000000000000000
-c3     : 0x621390 41414141414141414141
-c3     : 0x621390 00000000000000000000
-c5     : 0x23fe10 00000000000000000000
« Última modificación: 12 Mayo 2016, 23:36 pm por AlbertoBSD » En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #4 en: 12 Mayo 2016, 23:59 pm »

Hola.
Muchas gracias a los tres.
Geeke, lo tuyo no me funciona, ya lo había probado y cuando quiero hacer un bucle para demostrar que los 5 elementos contienen ceros, me muestra un solo cero. -
AlbertoBSD , que puedo decirte, gracias por el aporte. -   
En definitiva, como dijo MAFUS, con memset me funciona perfecto. -

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main( void ){
  5. char a[5];
  6. memset(a, '0', 5);
  7. size_t i;
  8.  
  9. for( i=0; i<5; i++ ){
  10. printf( "%c ", a[i] );
  11. }
  12.  
  13. return 0;
  14. }


Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #5 en: 13 Mayo 2016, 01:25 am »

Ahora creo que algunos nos confundimos por que por tu codigo tu te referias al 0 en su forma ascii y no al valor 0 o nulo.

Igualmente memset funciana para cualquier valor.

'0' != 0

Saludos
En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #6 en: 13 Mayo 2016, 04:28 am »

Geeke, lo tuyo no me funciona, ya lo había probado y cuando quiero hacer un bucle para demostrar que los 5 elementos contienen ceros, me muestra un solo cero. -

Si usas el especificador %c sólo imprimirá espacios porque el contenido del array es 0 == '\0' != '0' el carácter null generalmente se representa mediante un espacio, pero si cambias el especificador a %d se imprimirán los ceros

Por ultimo en estos casos es preciso ser especificos porque podria surgir ambiguedades, tal como vemos en este caso, el cero tiene diferentes significados esto dependiendo del contexto donde se lo usa.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #7 en: 13 Mayo 2016, 14:12 pm »

Hola, Deeke.
Muy bien, tienes razón, lo que muestra es coherente:
48 0 0 0 0
Igual me queda una duda, lo que estoy haciendo es una calculadora y necesito cada elemento con cero (no con el final de cadena), hice una práctica de esta forma y el resultado es correcto.
a[2] = 5;
y me muestra:
48 0 5 0 0
Bueno esa es la duda, ¿en todos los casos el resultado será correcto? o tendré de todas maneras que igualar todos los elementos a 0. -   

Un abrazo.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #8 en: 13 Mayo 2016, 14:51 pm »

Depende de como manejes la calculadora y que es lo que quieras hacer.

Define un formato y apegate a ese.

lo deal seriaa manera valores int para los numeros. pero si te pidieron manejar conversiones de cadena a numero entonces las cadenas limpialas con el valor 0 y no con el ascii '0'.

Repito dependiendo de lo que quieras hacer puede ser mas facil una u otra
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Inicializar cadena de caracteres en lenguaje C.
« Respuesta #9 en: 13 Mayo 2016, 15:38 pm »

Hola, Alberto.
Citar
...pero si te pidieron manejar conversiones de cadena a número....
  :laugh: :laugh: :laugh: evidentemente, no leíste mi perfil, tengo 64 años y soy autodidacta (de esta manera nos conocemos un poco más). -
Todo comenzo con este post http://foro.elhacker.net/programacion_cc/array_de_punteros_a_funcion_fltmin_fltmax_c-t452042.0.html  y como llegue a la conclusión que no podía validar que el ingreso sea correcto y al no poder ingresar una cantidad respetable de dígitos, (la que estoy haciendo acepta 100 dígitos) me puse a programar una calculadora, estoy un tanto trabado pero seguramente lo voy a lograr, cuento con vuestra ayuda. -

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener caracteres de una Cadena VB.NET
.NET (C#, VB.NET, ASP)
NetStorm 7 17,588 Último mensaje 29 Diciembre 2009, 02:06 am
por NetStorm
cadena de caracteres
Programación C/C++
Ander123 1 2,359 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines