[C con Clase] Cadenas en char*

Davidson, Steven srd4121 en njit.edu
Vie Abr 25 08:14:33 CEST 2014


Hola Facundo,

2014-04-25 0:41 GMT-04:00 Facundo Curti <facu.curti en gmail.com>:

> Gracias por la respuesta! Me has aclarado mucho! :)
>
>
De nada; para eso estamos.

Y si hago:
>
> char* cadena = "Hola mundo"
>
> Se reservan automáticamente las 12 posiciones en memoria? O tengo que
> antes haber definido el tamaño con el new?
>
>
Veamos. Esta situación es algo diferente. Aquí tenemos una cadena literal,
que el compilador gestionará. Esto significa que el compilador se encarga
de guardar la cadena literal en la memoria del programa, cuando éste se
cargue y se ejecute.

El lenguaje de C++ indica que el tipo de dato de una cadena literal es
'const char *'. Esto implica que no puedes inicializar el puntero 'cadena'
con el tipo 'char *', porque significa que puedes modificar su contenido.
Por lo tanto, debes definir 'cadena' así:

const char *cadena = "Hola mundo";


Si no te interesa cambiar el tipo de puntero de 'cadena', entonces tienes
que crear la memoria dinámicamente y copiar el contenido de la cadena
literal al array dinámico que acabas de crear. Por ejemplo,

char *cadena = new char[11];

memcpy( cadena, "Hola mundo" );  // Se #incluye en <cstring>


La otra alternativa es definir un array; esto es,

char cadena[] = "Hola mundo";

Aquí, el compilador copiará el contenido de la cadena literal al array
estático, 'cadena'.


Espero que esto aclare las dudas.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140425/39a44717/attachment.html>


Más información sobre la lista de distribución Cconclase