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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


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

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Duda de cadena de caracteres en C
« en: 27 Septiembre 2012, 23:22 pm »

Hola tengo una duda.

Soy nuevo en esto de la programación y ayer estaba en clases con un maestro de programación básica, nos  dejó un ejercicio en el cual teníamos que ingresar nuestro nombre y apellidos para que apareciera un saludo personalizado. Lo que hice fue crear un array de 80 elementos para guardar el nombre que se ingresara y hasta ahí todo bien.

El problema es que mi maestro dice que no es necesario generar un array de n elementos para guardar una cadena de caracteres y que eso se hacía cuando la memoria era poca y tenías que optimizar los recursos, pues bien, le quite el array y solo puse la variable nom tipo char, como pensé solo me guardó la primera letra. Después me puse a investigar en internet y encontré que solo puedo guardar una cadena de caracteres en un array tipo char. Así que mi duda es: ¿Se puede guardar una cadena de caracteres de otra forma en C? o si existe algún tipo de variable que sea tipo string o algo así.

Uso DevC++ y no estoy avanzado en lo de programar, solo hemos hecho cosas básicas como leer un caracter o sacar el área de un circulo.



En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #1 en: 27 Septiembre 2012, 23:36 pm »

Desde siempre las cadenas de carácteres en C se guardan en un array de carácteres que puede ser estático( cuando pones los elementos que va a tener) o dinámico .Es lógico que si solo pones un puntero a un carácter te salga solo la primera letra , pues solo hay espacio reservado para un carácter.No sé que es a lo que se refiere tu profesor , en C++ existe la clase string , pero al fin y al cabo termina siendo un array de char's.


« Última modificación: 27 Septiembre 2012, 23:39 pm por avesudra » En línea

Regístrate en
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #2 en: 28 Septiembre 2012, 00:01 am »

Hola tengo una duda.
Lo que hice fue crear un array de 80 elementos para guardar el nombre que se ingresara y hasta ahí todo bien.
Citar
Hasta ahí todo bien.
Citar
Así que mi duda es: ¿Se puede guardar una cadena de caracteres de otra forma en C? o si existe algún tipo de variable que sea tipo string o algo así.
Que yo sepa en C no, a no ser con el uso de punteros y la asignación dinámica de memoria Otra cosa es en C++ con la clase string, pero es muy avanzado para el nivel en que están.
Le entendiste mal o, lo más probable, se expresara mal.
Saludos!.
« Última modificación: 28 Septiembre 2012, 00:03 am por leosansan » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Duda de cadena de caracteres en C
« Respuesta #3 en: 28 Septiembre 2012, 00:34 am »

Pues la unica forma que hay es almacenarlo en un array, creo que hay otra pero si estais a ese nivel es muy compleja. Asi que o has entendido mal, o te han explicado mal.

Saludos
En línea

yoxter

Desconectado Desconectado

Mensajes: 48



Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #4 en: 28 Septiembre 2012, 00:54 am »

Saludos creo que esto lo que buscas

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5. char *nombre;
  6. char *saludo = "buenos dias";
  7.  
  8. printf("por favor ingrese su nombre \n");
  9. scanf("%s", nombre);
  10.  
  11.  
  12. printf("%s %s",saludo,nombre);
  13.  
  14.  
  15.  
  16. return 0;
  17. }
  18.  
En línea




Posiblemente soy el intento de programador mas fracaso de la historia !!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #5 en: 28 Septiembre 2012, 02:05 am »

Saludos creo que esto lo que buscas

Código
  1. char *nombre;
  2.  
  3. /* ... */
  4.  
  5. scanf("%s", nombre);
No es valido. Toda variable local inicia con un valor no definido o "basura", antes de utilizar ese puntero se debe almacenar en el una dirección valida ya sea mediante el operador "&" (no necesario en el caso de arrays) o el valor de retorno de malloc/calloc/realloc.

Como ya se ha comentado en el tema C no tiene un tipo para cadenas, en su lugar estas se almacenan en array de caracteres.

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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #6 en: 28 Septiembre 2012, 18:06 pm »

No es valido. Toda variable local inicia con un valor no definido o "basura", antes de utilizar ese puntero se debe almacenar en el una dirección valida ya sea mediante el operador "&" (no necesario en el caso de arrays) o el valor de retorno de malloc/calloc/realloc.
Como ves, si no es con array llegamos a punteros.
Más o menos, algo así:
Código
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. char *nombre;
  6. nombre = (char *)malloc (80*sizeof(char));
  7. char *saludo = "buenos dias";
  8. printf("por favor ingrese su nombre \n");
  9. fgets (nombre, 100,stdin);
  10. printf("%s %s",saludo,nombre);
  11. return 0;
  12. }
  13.  
Utilizo fgets porque se sobreentiende que al introducir nombre y apellido van a ir separados por un espacio en blanco, cosa que no consigues con el scanf tal como lo tienes. Lo considero más fácil que con variantes de scanf.
Un saludoPD:Reditado
« Última modificación: 28 Septiembre 2012, 19:12 pm por leosansan » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #7 en: 28 Septiembre 2012, 18:31 pm »

Como ves, si no es con array llegamos a punteros.
Más o menos, algo así:
Código
  1. #include <stdio.h>
  2.  
  3. /* ... */
  4.  
  5. nombre = (char *)malloc (80*sizeof(char));
Tres comentarios en relación al programa:

1) Antes de utilizar la función "malloc" debes incluir su prototipo mediante la inclusión de <stdlib.h>.

2) No es necesario convertir el valor de retorno de "malloc" al tipo "apropiado", un valor de tipo "void *" puede almacenarse de forma directa en una variable de cualquier tipo (por supuesto siempre que el tipo sea un "puntero a objeto").

3) La multiplicación esta de mas ya que "sizeof(char)" siempre es igual a uno.

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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #8 en: 28 Septiembre 2012, 19:21 pm »

Citar
Gracias por las observaciones rir, Como siempre que respondes, aprendo o tengo presente algo nuevo.
 Habrás observado que te hice caso en lo del uso de fgets frente a gets.
 Lo de "sizeof(char)" es para que Ixcal lo "vea mejor. Así en caso de tratarse de un int, float o double tenga presente su uso.

Un saludo
PD: Reedite el post anterior para tener en cuenta lo de stdlib.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Duda de cadena de caracteres en C
« Respuesta #9 en: 28 Septiembre 2012, 20:30 pm »

Reservas 80 bytes para nombre, y permites que se ingresen 100 caracteres con fgets().
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cadena de caracteres
Programación C/C++
Ander123 1 2,549 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
Duda sobre el control de la longitud de una cadena de caracteres
Programación C/C++
seryioo 2 1,938 Último mensaje 17 Agosto 2015, 10:22 am
por seryioo
[DUDA] Cadena de caracteres
Scripting
syncro_7 1 1,759 Último mensaje 16 Noviembre 2015, 05:37 am
por yMk369
Duda sobre problema de cadena de caracteres.
Programación C/C++
rafacg96 1 1,458 Último mensaje 2 Diciembre 2015, 07:11 am
por class_OpenGL
Duda sobre cadena de caracteres
Programación C/C++
Mika_50 5 2,205 Último mensaje 21 Enero 2016, 22:44 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines