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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al recorrer cadena
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al recorrer cadena  (Leído 3,023 veces)
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Problema al recorrer cadena
« en: 7 Octubre 2016, 17:47 pm »

Ho amigos, estoy intentando recorrer una cadena, o mas bien por lo pronto acceder a sus valores y no logro hacerlo, si acceso directamente poniendo un %c me deja pero a la hora de comprara valores no funciona.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.  
  6. char tecla[5] = "AEIOU";
  7. char vo[1];
  8.  
  9. printf("Una vocal mayuscula: ");
  10. scanf("%s",vo);
  11.  
  12. printf("%c\n",tecla[3] );  /* Lo hace correctamente */
  13.  
  14. printf("Esto esta %s\n",(strcmp(tecla[3],vo) == 0) ? "BIEN" : "MAL"); /* No es capaz de leer el dato */
  15.  
  16. return 0;
  17. }

Saludos!!!


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #1 en: 7 Octubre 2016, 18:16 pm »

Esta parte está mal:
Código
  1. scanf("%s",vo);
  2.  

vo solo puede contener un caracter. No has declarado espacio suficiente para almacenar el caracter \0 que indica el final de la cadena. Tienes que modificar las declaraciones teniendo ésto en cuenta.


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #2 en: 7 Octubre 2016, 18:27 pm »

Aun si le dira mas espacio, así:

Código
  1. char vo[5];

me marcar error, de hecho me marca este warring al compilar:

Código:
pruebas.c:16: warning: assignment makes pointer from integer without a cast

Es lo que no detecto, que podrá ser.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #3 en: 7 Octubre 2016, 20:03 pm »

XD

No lo había visto, me había quedado con el error anterior. Estas utilizando tecla[3], que es un caracter, cuando strcmp espera dos punteros a caracter (o cadenas=punteros a un espacio de memoria de posiciones consecutivas delimitado por el caracter nulo '\0').
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #4 en: 7 Octubre 2016, 20:18 pm »

Entonces, disculpando mi ignorancia, como debería quedar la variable para que pueda compararla????

Saludos!!!!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #5 en: 7 Octubre 2016, 20:31 pm »

Cometes bastantes fallos.

1. Tecla tiene un tamaño menor al que en verdad usa. Has reservado 5 bytes pero las cadenas tienen un byte más, el '\0' que marca el fin de cadena, por tanto deberías haber declarado tecla[6] o simplemente tecla[] pues si se define con una cadena C automáticamente reserva memoria.

2. Creas un array de chars con la intención de convertirlo en una cadena cuándo sólo quienes obtener un carácter.
Una cadena tiene, al menos 1 carácter, el nulo '\0' que marca fin de cadena.
Si tu intención es crear una cadena con 1 caracter válido debes reservar una memoria de 2 carácteres: uno para el carácter y otro para el carácter nulo.

3. Recoges una cadena de tamaño arbitrario mediante scanf("%s", vo);. Al hacer esto puedes cargar una cadena muy larga en vo y va a sobrepasar a la memoria que has pedido para la variable, por lo que se escribirá una parte de la memoria de la que no se tiene control. Puede pasar cualquier cosa, hasta que tu ordenador entre en internet, hackee un silo de misiles nucleares e inicie la tercera guerra mundial.
Para solventar eso haz que scanf tan solo tome 1 único carácter con scanf("%1s", vo);.

4. strcmp espera que se le pasen dos punteros que apunten a una cadena. Cuando tu pasas como argumento tecla[3] en realidad le estás pasando lo que hay en la cuarta posición de la cadena tecla, que es el caracter O. Como un carácter internamente es un valor numérico strcmp tomará ese valor numérico identificándolo como la dirección de inicio de una cadena. Seguro que el programa te va a fallar porqué el S.O. verá que esa posición de memoria no pertenece al segmento de tu programa y para evitar males mayores lo va a abortar.
En línea

Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #6 en: 7 Octubre 2016, 21:02 pm »

Perfecto, y entonces como debe quedar?

algún ejemplo??
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #7 en: 7 Octubre 2016, 21:06 pm »

Antes de ticar código, dime.

De lo que te hemos puesto ¿qué has entendido?
A lo mejor te contestas a ti mismo y sabes terminar el programa.
En línea

Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: Problema al recorrer cadena
« Respuesta #8 en: 7 Octubre 2016, 21:11 pm »

Si, ya entendí todo, es muy básico, lo único que no entiendo es como acomodar los parámetros a strcmp, ya que si le paso el valor a una variable, no lo toma, e igual si se trato de añadir el carácter nulo, no lo hace, mi duda aquí entonces es como funciona strcmp(par1,par2)

Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al recorrer array
PHP
painkillerpucela 2 1,877 Último mensaje 14 Julio 2012, 00:04 am
por Stakewinner00
[?] C++ Ayuda Recorrer cadena?
Programación C/C++
Scene 2 10,597 Último mensaje 9 Septiembre 2013, 17:42 pm
por rir3760
Codigo que estraiga de una cadena las palabras que empiecen por otra cadena
Java
Javator 4 3,274 Último mensaje 25 Febrero 2014, 17:09 pm
por Javator
Convertir cada caracter de una cadena en una cadena independiente [SOLUCIONADO]
Programación C/C++
jazx 6 4,212 Último mensaje 12 Mayo 2015, 03:56 am
por x64core
recorrer una cadena de caracteres « 1 2 »
Programación C/C++
marta.r 10 2,944 Último mensaje 4 Enero 2019, 18:46 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines