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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Es mejor tabla de caracteres que cadena literal?:O
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Es mejor tabla de caracteres que cadena literal?:O  (Leído 2,029 veces)
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
¿Es mejor tabla de caracteres que cadena literal?:O
« en: 27 Abril 2014, 10:57 am »

A ver chicos :D
Necesito esclarecer una dudita.
En el libro de deitel sobre las cadenas de caracteres tal y tal dice que es mejor una tabla o arreglo de char que una cadena literal.
A ver me explico por si las moscas:
una cadena literal es esto:

char tabla[]="sopita";

y una tabla de chars es esto:

char tabla2[] = {'s','o','p','i','t','a','\0'};

Pensaba que era lo mismo  :huh:  :o

Dice que si hago como cadena literal puede que el sistema la almecene en un lugar de la memoria que no me deje cambiar y que de la otra forma garantizo la posibilidad de cambio en un futuro.
Gracias de antemano  ;-)

c tiene mas gato encerrado que el copón XDD hay que estar atento a muchas cosas.


« Última modificación: 27 Abril 2014, 12:49 pm por vangodp » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena litera?:O
« Respuesta #1 en: 27 Abril 2014, 11:20 am »

Para nada, ambas sintaxis son correctas.

Creo que confundes con:

char* tabla = "sopita";

Esa si que no la puedes cambiar.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena litera?:O
« Respuesta #2 en: 27 Abril 2014, 11:42 am »

cadena literal:
char color [ ] = " azul " ;
const char *ptrColor = "azul" ;

en el libro pone que estos casos de arriba no son el mismo que este:

tabla de chars:
char color [ ] = { 'a','z','u', 'l', '\0' } ;

puedo equivocarme pero si dudas haré una captura XDDD

sus palabras exactas son:

"Cuando se inicializa una variable de tipo char* con una literal de cadena, es posible que algunos compiladores
coloquen la cadena en un lugar de la memoria, en donde ésta no se pueda modificar: Si necesitara modificar una literal de cadena, podría almacenarla en un arreglo de caracteres para garantizar que pueda modificarla en cualquier
sistema."


ademas es un tip de portabilidad del libro
« Última modificación: 27 Abril 2014, 11:45 am por vangodp » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena litera?:O
« Respuesta #3 en: 27 Abril 2014, 12:50 pm »

Tú mismo lo has dicho, un tipo char*

Pero en los ejemplos que pones en el primer post son del tipo char[]
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena literal?:O
« Respuesta #4 en: 27 Abril 2014, 12:51 pm »

pero a ver un char[] no es lo mismo que un char* :S

digo por que algo se me escapa.

Si declaro:

char letra[] = "una cadena";

char *letra = "una cadena";

no son ambos punteros a la posición 0 de la cadena.   :huh:

que relacion tienenlas 3 formas.
char color [ ] = " azul ";                     //declaro una tabla y guardo "azul"
const char *ptrColor = "azul" ;           //declado un puntero a "azul" ¿creo que apunta a la posicion 0?
char color [ ] = { 'a','z','u', 'l', '\0' } ;  // y esto queo que es lo mismo que char color [ ] = " azul ";, o me equivoco... vaya lio XDD

« Última modificación: 27 Abril 2014, 12:59 pm por vangodp » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena literal?:O
« Respuesta #5 en: 27 Abril 2014, 12:59 pm »

A la hora de declararlo, no.

Te lo explico brevemente. Cuando tu pones:
Código
  1. char texto[5] = "Hola";

Eso es la declaración de un array. Para facilitar la sintaxis el compilador te permite escribir eso, internamente lo traduce como:
Código
  1. char texto[5] = {'H','o','l','a','\0'};

En cuanto al char*, cuando tu pones:
Código
  1. char* texto = "Hola";

Estas declarando un puntero (que no un array) que apunta a la cadena "Hola". Esa cadena suele ser un array constante que el compilador crea sobre la marcha.

Si intentas modificar el contenido de un array constante, el resultado es indefinido. Lo que si puedes hacer esque el puntero apunte a otra cadena:
Código
  1. char* texto = "Hola";
  2.  
  3. /...
  4.  
  5. texto = "Nuevo texto";
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: ¿Es mejor tabla de caracteres que cadena literal?:O
« Respuesta #6 en: 27 Abril 2014, 13:11 pm »

Eso es una explicación de 1º  ;-)
Ahora si lo he pillao -_-'
Muchísimas gracias  ;D
no estaba enterandome de lo de char*ptr = "hola";
O sea que es constante y por eso no se puede cambiar hmmmm
¡Eres un artista!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener caracteres de una Cadena VB.NET
.NET (C#, VB.NET, ASP)
NetStorm 7 17,586 Último mensaje 29 Diciembre 2009, 02:06 am
por NetStorm
cadena de caracteres
Programación C/C++
Ander123 1 2,355 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
¡LITERAL! Conversación entre un venezolano y un colombiano
Foro Libre
Machacador 9 4,493 Último mensaje 29 Noviembre 2020, 02:14 am
por Aguijon_zerO
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines