Autor
|
Tema: Duda de cadena de caracteres en C (Leído 6,304 veces)
|
Ixcal
Desconectado
Mensajes: 2
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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
Mensajes: 1.314
|
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. Hasta ahí todo bien. 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
|
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
Mensajes: 48
|
Saludos creo que esto lo que buscas #include <stdio.h> int main() { char *nombre; char *saludo = "buenos dias"; printf("por favor ingrese su nombre \n"); printf("%s %s",saludo ,nombre ); return 0; }
|
|
|
En línea
|
Posiblemente soy el intento de programador mas fracaso de la historia !!
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Saludos creo que esto lo que buscas char *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
Mensajes: 1.314
|
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í: #include <stdio.h> #include<stdlib.h> int main() { char *nombre; nombre = (char *)malloc (80*sizeof(char)); char *saludo = "buenos dias"; printf("por favor ingrese su nombre \n"); fgets (nombre , 100,stdin ); printf("%s %s",saludo ,nombre ); return 0; }
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
Mensajes: 1.639
|
Como ves, si no es con array llegamos a punteros. Más o menos, algo así: #include <stdio.h> /* ... */ 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
Mensajes: 1.314
|
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
Mensajes: 1.077
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
cadena de caracteres
Programación C/C++
|
Ander123
|
1
|
2,561
|
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,945
|
17 Agosto 2015, 10:22 am
por seryioo
|
|
|
[DUDA] Cadena de caracteres
Scripting
|
syncro_7
|
1
|
1,765
|
16 Noviembre 2015, 05:37 am
por yMk369
|
|
|
Duda sobre problema de cadena de caracteres.
Programación C/C++
|
rafacg96
|
1
|
1,462
|
2 Diciembre 2015, 07:11 am
por class_OpenGL
|
|
|
Duda sobre cadena de caracteres
Programación C/C++
|
Mika_50
|
5
|
2,211
|
21 Enero 2016, 22:44 pm
por Orubatosu
|
|