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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda con arreglo de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con arreglo de caracteres  (Leído 1,767 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
duda con arreglo de caracteres
« en: 1 Abril 2014, 02:23 am »

Saludos

si yo quiero declarar un arreglo de 2 caracteres que sean:

char arreglo[] = {'\0',','};

uno que es una coma, y el otro que es el simbolo de fin de cadena, pero me dicen que al declarar un arreglo de caracteres al final se le tiene que poner precisamente el simbolo '\0', entonces tendria yo que poner a fuerzas otro signo de fin de linea??

char arreglo[] = {'\0',',','\0'};


En línea

razormta

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: duda con arreglo de caracteres
« Respuesta #1 en: 1 Abril 2014, 04:20 am »

creo que entiendo tu pregunta y mmmm no se, creo que si he llegado a poner signo  de fin de cadena antes de que llegue al verdadero signo de fin de cadena ( '\0' ) mmm pero no recuerdo que paso y me da pereza ir al compilador a ver xd , porque no intentas verlo por tu cuenta ?

lo que yo suponto que pasara que que por ejemplo ...

Código
  1. char str[10];
  2.  
  3. strcpy( str, "test");
  4.  
  5. std::cout<<str<<std::endl;

imprimira : test
y si hago

Código
  1. str[2] = '\0';
  2.  
  3. std::cout<<str<<std::endl;

imprimira: te

haha por logica es lo que pienso que sucedera, pero tengo tiempo sin trabajar con cadena de caracteres xd

si mi teoria es cierto entonces, tienes un string : { 'a', '\0', 'b' , '\0' }

si lo imprimes en pantalla deberia mostrar: a

pero bueno ... intentalo a ver xd


« Última modificación: 1 Abril 2014, 04:22 am por razormta » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda con arreglo de caracteres
« Respuesta #2 en: 1 Abril 2014, 04:42 am »

me dicen que al declarar un arreglo de caracteres al final se le tiene que poner precisamente el simbolo '\0', entonces tendria yo que poner a fuerzas otro signo de fin de linea?
Hay que diferenciar entre contenedor (array de caracteres) y contenido (cadena siendo esta una secuencia de caracteres seguida de un '\0').

Si solo quieres almacenar caracteres para un uso posterior no necesitas el '\0' pero si piensas procesar su contenido como una cadena (por ejemplo con las funciones de la biblioteca estándar de C) debes asegurarte de que ese carácter este ahí para marcar el final de ella.

En resumen es necesario o no dependiendo del uso del array (algo que no indicas).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: duda con arreglo de caracteres
« Respuesta #3 en: 1 Abril 2014, 17:30 pm »

muchas gracias por sus respuestas

El arreglo lo necesito para una función como esta:

Código
  1. char *obtenerInstruccion(char *operando,int x)
  2. {
  3.    int i;
  4.    char *cadena = NULL,c[2];
  5.    cadena = calloc(7,sizeof(char));
  6.    for(i = x;operando[i] != ',';i++)
  7.    {
  8.        sprintf(c,"%c",operando[i]);
  9.        strcat(cadena,c);
  10.    }
  11.    return cadena;
  12. }

para que en la condicion operando != aqui pueda ser o '\0' o la coma
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.411


ASMático


Ver Perfil WWW
Re: duda con arreglo de caracteres
« Respuesta #4 en: 1 Abril 2014, 18:08 pm »

Si te sirve de algo, mi recomendación es que no uses el caracter 0 como indicador. Usa otro. Recuerda que hay 255 caracteres más jaja
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: duda con arreglo de caracteres
« Respuesta #5 en: 1 Abril 2014, 18:49 pm »

Si te sirve de algo, mi recomendación es que no uses el caracter 0 como indicador. Usa otro. Recuerda que hay 255 caracteres más jaja
Eres el chapuzas, luego cuando vayas a hacer un printf o usar una función de la librería estandar la lías parda xD.

@mo_614: Lo que quieres hacer esta implementado ya por la función: strtok()
http://c.conclase.net/librerias/?ansifun=strtok

Más bonito y elegante que eso no vas a encontrar. Le pasas como token la coma y te saca las "subcadenas" en cada llamada.
« Última modificación: 1 Abril 2014, 19:19 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda con arreglo de caracteres
« Respuesta #6 en: 2 Abril 2014, 19:22 pm »

El arreglo lo necesito para una función como esta:

Código
  1. char *obtenerInstruccion(char *operando,int x)
  2. {
  3.    int i;
  4.    char *cadena = NULL,c[2];
  5.    cadena = calloc(7,sizeof(char));
  6.    for(i = x;operando[i] != ',';i++)
  7.    {
  8.        sprintf(c,"%c",operando[i]);
  9.        strcat(cadena,c);
  10.    }
  11.    return cadena;
  12. }

para que en la condicion operando != aqui pueda ser o '\0' o la coma
Lo primero a recomendar (lo digo en buen plan) es darle un buen repaso a tu material de referencia porque hay (en este y otros mensajes) malas practicas:

* Inicializas la variable "cadena" a NULL pero lo primero que haces con ella es asignarle otro valor. Eso ultimo vuelve la inicializacion inútil, hay que eliminarla.

* El delimitador de cadena '\0' se puede agregar de forma manual o bien utilizando una función de la biblioteca estándar de C, hay que cambiar el uso de calloc por malloc.

* Das por sentado que la cadena resultante siempre tendrá menos de siete caracteres, no hay problema si ello lo tienes garantizado pero de no ser así el programa puede reventar.

* En cada iteración del bucle creas una cadena con un solo caracter mediante sprintf y después la copias con strcat. En otras palabras estas copiando caracteres y bien los copias en un bucle sin necesidad de esas dos funciones o utilizas una sola llamada a función.

El proceso de forma manual:
Código
  1. char *obtenerInstruccion(char *oper)
  2. {
  3.   char *rv;
  4.   int i;
  5.   int j;
  6.  
  7.   for (i = 0; oper[i] != '\0' && oper[i] != ','; i++)
  8.      ;
  9.  
  10.   if (i == 0)
  11.      rv = NULL;
  12.   else if ((rv = malloc(i + 1)) != NULL){
  13.      for (j = 0; j < i; j++)
  14.         rv[j] = oper[j];
  15.      rv[j] = '\0';
  16.   }
  17.  
  18.   return rv;
  19. }

Y utilizando funciones de la biblioteca estándar de C:
Código
  1. char *obtenerInstruccion(char *oper)
  2. {
  3.   char *rv;
  4.   size_t i = strcspn(oper, ",");
  5.  
  6.   if (i == 0)
  7.      rv = NULL;
  8.   else if ((rv = malloc(i + 1)) != NULL)
  9.      sprintf(rv, "%.*s", i, oper);
  10.  
  11.   return rv;
  12. }
No es necesario pasar la dirección del array y el indice del elemento, en su lugar pasas directamente la dirección del elemento con "a + i" donde "a" es el array e "i" el indice del elemento donde inicia la búsqueda.


Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Convertir cadena en una arreglo de caracteres
Programación Visual Basic
Javilondo 3 9,383 Último mensaje 29 Octubre 2008, 23:01 pm
por Javilondo
modificar arreglo de cadena de caracteres
Programación C/C++
kworld 2 5,094 Último mensaje 31 Mayo 2010, 15:38 pm
por Littlehorse
Duda con puntero a arreglo de caracteres
Programación C/C++
dato000 5 3,395 Último mensaje 30 Noviembre 2012, 21:13 pm
por xiruko
Cantidad de caracteres en un arreglo y cortar una cadena
Programación C/C++
josri 5 2,848 Último mensaje 16 Marzo 2013, 16:34 pm
por naderST
[C] Copiar arreglo de caracteres con Operador Igual
Programación C/C++
AlbertoBSD 8 3,039 Último mensaje 25 Junio 2016, 11:40 am
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines