[C con Clase] Cadenas en char*

Facundo Curti facu.curti en gmail.com
Vie Abr 25 19:05:04 CEST 2014


El día 25 de abril de 2014, 3:14, Davidson, Steven <srd4121 en njit.edu> escribió:
> 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
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Wow. Muchas gracias. Excelente tu explicación. Me has sacado todas las dudas.

Un abrazo! ;)




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