Asignar string a variable char en C++

Consultas, dudas, respuestas y tips sobre programación en distintos lenguajes

Moderadores: Colaboradores Computacion, Moderadores Programacion

Asignar string a variable char en C++

Notapor hightechboy » Dom Abr 09, 2006 11:30 pm

Otra mas de C++ para los eruditos que me helpean:

declaro una variable char, pero no puedo hacer que esta contenga un string sin hacer que obtenga el valor por scanf, en codigo

programa{

char palabra;

palabra='hola';

}


y ahi sale el puto error, que no se puede...

o incluso con:

programa{

char palabra[30];

palabra='hola';
}

y en este caso me dice que falta declarar el Lvalue, haya yo a saber que es eso...

alguien que cache?
Avatar de Usuario
hightechboy
Me alimento del foro...
Me alimento del foro...
 
Mensajes: 787
Registrado: Mar Sep 03, 2002 2:54 pm

Notapor trotamund » Dom Abr 09, 2006 11:53 pm

pues un char colo almacena un caracter.

Código: Seleccionar todo
char letra='H';


si quieres almacenar una palabra, por ejemplo de 4 caracteres, el "char" donde lo guardarás tiene que ser de 5.

Código: Seleccionar todo
char palabra[5];


si quieres asignarle el valor a palabra, tienes tres formas

Código: Seleccionar todo
palabra = {'h','o','l','a','\0'};


Código: Seleccionar todo
palabra[0]='h';
palabra[0]='o';
palabra[0]='l';
palabra[0]='a';
palabra[0]='\0';


la otra manera es con una función que está en la librería string.h
Código: Seleccionar todo
strcpy(palabra,"hola");


bueno, espero que te sirva de ayuda.

en todo caso no estaría de más que te visites [url]c.conclase.net[/url]
PowerMac G4 500Mhz, 512Mb RAM, DVD-RW, Ati rage pro 16Mb. OSX Tiger.
MacBook 1.83Ghz, 2Gb RAM, HD 60Gb OSX Leopard.
Avatar de Usuario
trotamund
Super Usuari@!
Super Usuari@!
 
Mensajes: 207
Registrado: Sab Ago 13, 2005 4:04 pm

Notapor hightechboy » Lun Abr 10, 2006 12:26 am

trotamund escribiste:pues un char colo almacena un caracter.

Código: Seleccionar todo
palabra[0]='h';
palabra[0]='o';
palabra[0]='l';
palabra[0]='a';
palabra[0]='\0';



esos 0 no deberian ir en orden decreciente?

Mira, justo habia encontrado la respuesta en un libro medio raro que tengo, de igual modo, gracias!!
Avatar de Usuario
hightechboy
Me alimento del foro...
Me alimento del foro...
 
Mensajes: 787
Registrado: Mar Sep 03, 2002 2:54 pm

Notapor trotamund » Lun Abr 10, 2006 7:47 am

ah si, esos indices son, 0,1,2,3,4 y 5, eso es por hacer el típico copy and paste :-P
PowerMac G4 500Mhz, 512Mb RAM, DVD-RW, Ati rage pro 16Mb. OSX Tiger.
MacBook 1.83Ghz, 2Gb RAM, HD 60Gb OSX Leopard.
Avatar de Usuario
trotamund
Super Usuari@!
Super Usuari@!
 
Mensajes: 207
Registrado: Sab Ago 13, 2005 4:04 pm

Notapor CalgaryCorpus » Lun Abr 10, 2006 11:33 am

Tambien es posible
Código: Seleccionar todo
char p[] = "hola";

pero hay que tener cuidado con los accesos posteriores a p.
CalgaryCorpus
Super Usuari@!
Super Usuari@!
 
Mensajes: 211
Registrado: Lun Nov 08, 2004 9:52 am

Notapor F3lip3 » Mar Abr 11, 2006 12:29 am

Puedes declarar la variable char como un puntero char y luego asignarle memoria dinamicamente, seria asi:
Código: Seleccionar todo
#include<stdlib.h>
#include<string.h>
int main ()
{
    char *d;
    char p[] = "hola";
    d=(char *) malloc (strlen(p)*sizeof(char));
}
Algo similar se puede hacer con la funcion calloc
F3lip3
Por culpa del foro, no vivo ni pienso
Por culpa del foro, no vivo ni pienso
 
Mensajes: 1653
Registrado: Mié Jun 02, 2004 10:14 pm
Ubicación: ?????

Notapor CalgaryCorpus » Mar Abr 11, 2006 11:29 am

Una observacion:
sizeof(char) por definicion es 1. Por tanto usarlo y multiplicar por sizeof(char) es superfluo, y para tener espacio suficiente hay que considerar el espacio para el 0 final [vale decir, hay que sumar 1], quedando entonces:
Código: Seleccionar todo
d=(char*) malloc( strlen(p) + 1 );

pero esto no copia el string, solo reserva memoria, mejor
Código: Seleccionar todo
 d = strdup(p);
que reserva memoria y copia el string en una sola invocacion, ademas de evitar el cast.
CalgaryCorpus
Super Usuari@!
Super Usuari@!
 
Mensajes: 211
Registrado: Lun Nov 08, 2004 9:52 am

Notapor F3lip3 » Mar Abr 11, 2006 2:57 pm

Yo pensaba q el tamaño de un char era 4... no estoy seguro pero bueno esa es la idea...
F3lip3
Por culpa del foro, no vivo ni pienso
Por culpa del foro, no vivo ni pienso
 
Mensajes: 1653
Registrado: Mié Jun 02, 2004 10:14 pm
Ubicación: ?????

Notapor SymphonyX » Mar Abr 11, 2006 3:32 pm

Siempre que veo respuestas dedicadas a C o C++ veo que se arman polemicas respuestas ....

C y C++ son lenguajes que dan polemica....

:D
RPG Gamer ...
SymphonyX
Soy esclav@ del foro
Soy esclav@ del foro
 
Mensajes: 2421
Registrado: Lun Ago 09, 2004 6:10 pm
Ubicación: Retrogames.cl

Notapor CalgaryCorpus » Mar Abr 11, 2006 3:58 pm

F3lip3 escribiste:Yo pensaba q el tamaño de un char era 4... no estoy seguro pero bueno esa es la idea...


Yo, en cambio, estoy seguro. sizeof(char) esta definido como 1. La definicion del lenguaje dice eso.

Google: sizeof(char)

http://www.zator.com/Cpp/E4_9_13.htm
Cuando el operando es de tipo char (con o sin signo) el resultado es 1


http://publications.gbdirect.co.uk/c_bo ... alloc.html
The fundamental unit of storage in C is the char, and by definition

sizeof(char)

is equal to 1
CalgaryCorpus
Super Usuari@!
Super Usuari@!
 
Mensajes: 211
Registrado: Lun Nov 08, 2004 9:52 am

Notapor SymphonyX » Mar Abr 11, 2006 4:32 pm

CalgaryCorpus escribiste:
F3lip3 escribiste:Yo pensaba q el tamaño de un char era 4... no estoy seguro pero bueno esa es la idea...


Yo, en cambio, estoy seguro. sizeof(char) esta definido como 1. La definicion del lenguaje dice eso.

Google: sizeof(char)

http://www.zator.com/Cpp/E4_9_13.htm
Cuando el operando es de tipo char (con o sin signo) el resultado es 1


http://publications.gbdirect.co.uk/c_bo ... alloc.html
The fundamental unit of storage in C is the char, and by definition

sizeof(char)

is equal to 1


A veces me pregunto que porque a C y sus derivados les gusta hacer las cosas "complicadas". Creo y soy de la idea que ese tipo de detalles no tendria porque quedar a cargo del "desarrollador" ya que en el fondo la idea es preocuparse del negocio o uso del programa y no de asuntos "tecnicos".

Eso.
RPG Gamer ...
SymphonyX
Soy esclav@ del foro
Soy esclav@ del foro
 
Mensajes: 2421
Registrado: Lun Ago 09, 2004 6:10 pm
Ubicación: Retrogames.cl

Notapor CalgaryCorpus » Mar Abr 11, 2006 4:41 pm

SymphonyX escribiste:A veces me pregunto que porque a C y sus derivados les gusta hacer las cosas "complicadas". Creo y soy de la idea que ese tipo de detalles no tendria porque quedar a cargo del "desarrollador" ya que en el fondo la idea es preocuparse del negocio o uso del programa y no de asuntos "tecnicos".


No comprendo el por que de ese comentario. Esos "detalles tecnicos", en lenguaje C, no quedan a cargo del "desarrollador". Estan definidos desde el principio por el propio lenguaje. No es algo que tengas que decidir en el momento o por cada aplicacion. Tampoco puedes decidir cambiarlo, extenderlo, modificarlo. Es asi. Una definicion.
CalgaryCorpus
Super Usuari@!
Super Usuari@!
 
Mensajes: 211
Registrado: Lun Nov 08, 2004 9:52 am

Notapor F3lip3 » Mar Abr 11, 2006 4:41 pm

Yo nunca dije q no era asi, solo q no estaba seguro, me da la sensacion q eres demasiado prepotente... ademas tienes razon sizeof(char) devuelve 1 pero no por definicion, si no pq el tamaño de una variable char es de 1 bytes asi como sizeof (int) devuelve 4 pues el tamaño de un int es 4 bytes. Ahora si me equivoque fue por q ya hace un rato q no veo C pero algo me acordaba y solo quise ayudar, ademas deje claro cuando dije
F3lip3 escribiste:no estoy seguro pero bueno esa es la idea..
era solo una idea, por lo demas nunca acostumbro a dar en badeja de plata las soluciones, no creo q eso ayude, es as bien un "flaco favor"
F3lip3
Por culpa del foro, no vivo ni pienso
Por culpa del foro, no vivo ni pienso
 
Mensajes: 1653
Registrado: Mié Jun 02, 2004 10:14 pm
Ubicación: ?????

Notapor CalgaryCorpus » Mar Abr 11, 2006 4:48 pm

F3lip3 escribiste:ademas tienes razon sizeof(char) devuelve 1 pero no por definicion, si no pq el tamaño de una variable char es de 1 bytes asi como sizeof (int) devuelve 4 pues el tamaño de un int es 4 bytes


F3lip3, estas equivocado. Cuando el lenguaje C se invento', se definio que sizeof(char) fuera 1.

el sizeof() de un int NO esta definido por el lenguaje y decir que es de tamano 4 es una generalizacion que NO es portable.

Hoy, en otros lenguajes, en que sizeof(char)=1 ya no es tan cierto, C#, por ejemplo, usa char con sizeof de 2. [Unicode].

Pareciera que esto fuera un tema de opinion, y para mi no es asi. El lenguaje C es lo que es, y es posible apoyarse en los libros originales de la definicion y en los estandares posteriores, todos ellos apoyan lo que estoy diciendo, y si te corrijo, no lo tomes como una critica personal, sino que es en beneficio del foro mismo.
CalgaryCorpus
Super Usuari@!
Super Usuari@!
 
Mensajes: 211
Registrado: Lun Nov 08, 2004 9:52 am

Notapor F3lip3 » Mar Abr 11, 2006 11:08 pm

El peso de las variables es eso y no una definicion lo q si es una definicion son los rangos de estas pero no su peso. Un byte es un byte aqui y donde sea. Se uso un byte para char por que es lo q basta para guardar ese tipo de dato, igual con los int, los float, etc, etc. Ahora si en otros lenguajes se definio distinto, es valido pero insisto un byte es byte y el peso es el resultado de la definicion y no la definicion en si.
F3lip3
Por culpa del foro, no vivo ni pienso
Por culpa del foro, no vivo ni pienso
 
Mensajes: 1653
Registrado: Mié Jun 02, 2004 10:14 pm
Ubicación: ?????

Siguiente

Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados