Entonces los array casi no se usan para almacenar datos de entrada de tipo string?<br>Cómo haría lo de la memoria dinámica? Con punteros?<br>Gracias por la ayuda.<br><br><div><span class="gmail_quote">El día 3/01/07, <b class="gmail_sendername">
zelion</b> <<a href="mailto:Zelion_cracking@yahoo.es">Zelion_cracking@yahoo.es</a>> escribió:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">











<div link="blue" vlink="purple" lang="ES">

<div>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<div>

<div style="text-align: center;" align="center"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">

<hr align="center" size="2" width="100%">

</span></font></div>

<p style="margin-left: 1cm;"><b><font face="Tahoma" size="2"><span style="font-size: 10pt; font-family: Tahoma; font-weight: bold;">De:</span></font></b><font face="Tahoma" size="2"><span style="font-size: 10pt; font-family: Tahoma;">

<a href="mailto:cconclase-bounces@listas.conclase.net" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">cconclase-bounces@listas.conclase.net</a>
[mailto:<a href="mailto:cconclase-bounces@listas.conclase.net" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">cconclase-bounces@listas.conclase.net</a>] <b><span style="font-weight: bold;">En nombre de 
</span></b>David
Reza<br>
<b><span style="font-weight: bold;">Enviado el:</span></b> miércoles, 03 de enero
de 2007 2:21<br>
<b><span style="font-weight: bold;">Para:</span></b> Lista de correo sobre C y
C++<br>
<b><span style="font-weight: bold;">Asunto:</span></b> [Bulk] [C con Clase]
Pregunta sobre Cadena de caracteres (Arrays)</span></font></p>

</div><div><span class="e" id="q_10fe9ae346b65156_1">

<p style="margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"> </span></font></p>

<p style="margin-right: 0cm; margin-bottom: 12pt; margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">Hola, me gustaría saber como puedo hacer para que
pueda hacer un programa que lea una cadena de caracteres y lo guarde en un
array de tipo char.<br>
<br>
Esque leí que la asignación directa solo está permitida cuando se hace la
declaración. Entonces no se puede hacer algo como: </span></font></p>

<p style="margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">char cadena[];<br>
cin >> cadena;</span></font></p>

<p style="margin-right: 0cm; margin-bottom: 12pt; margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><br>
y esperar que todo lo que reciba cadena se guarde en el array?<br>
Tal vez puede que si, y sólo se guarde la primera palabra ya que un espacio es
un carácter nulo y eso le daría a entender al compilador que hasta ahí termina
la cadena, pero entonces sí se puede? <br>
<br>
También sé que se puede hacer con un púntero, creo que de la siguiente forma:</span></font></p>

<p style="margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;">char *pCadena;<br>
cin >> pCadena;</span></font></p>

<p style="margin-left: 1cm;"><font face="Times New Roman" size="3"><span style="font-size: 12pt;"><br>
o algo así. <br>
<br>
Ojalá puedan orientarme. Saludos<br clear="all">
<br>
-------------------------<br>
| = David Reza = | </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p></span></div>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Hola David.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Bueno, creo que no tienes muy claro los
punteros en C/C++, haber si puedo orientarte un poco, ya que es donde reside la
potencia de c/c++</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Lo primero que tienes que saber, es que todos
los punteros son variables del tamaño de un entero "int", que
guarda una direccion de memoria. Es del tamaño de un entero porque las
direcciones de memoria son de 32 bits. (Bueno esto depende de la plataforma
para la que desarrolles la aplicación). </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">¿Pero cuanta memoria maneja el puntero? Pues
aquí es donde entra el tipo del puntero, el tipo del puntero indica como va a
ser de grande los datos del puntero.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Un ejemplo:</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">char A = "a";     // Variable
de el tamaño de un carácter "1 byte" con el valor "a".</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">char *B = &A;   // "B" es
un puntero "int", del tamaño de memoria de un carácter "char",
que apunta a la direccion de "A". Esto significa que "B"
= direccion de memoria de "A". Esto es: "B" es "int"
y "*B" es "char" </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">(Segun la propiedad asociativa, si "B"
apunta a "&A" y "*B" es del tamaño de un carácter significa
que " *B = a" )</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Hasta aquí supongo que todo claro.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Bien veamos como manejar los tamaños de
punteros con tu ejemplo.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Una cosa a saber es que un array "[]",
tan solo es un puntero constante que apunta a una direccion de memoria que se reserva
al inicio de la aplicaion, y es asi como lo tienes que ver. Esto significa que
se asigna espacio de memoria para el array al iniciar la aplicación, asi pues
se necesita indicarle cuanto tamaño de memoria asignar al array. Por eso el
array se tiene que inicializar. Y se puede inicializar de 2 maneras:</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p style="margin-left: 35.4pt; text-indent: -35.4pt;"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">char A [3];        // "A" es un puntero constante "int"
de el tamaño de memoria de un carácter "char", que apunta a una
direccion de memoria reservada durante el inicio de la aplicación ( en este
caso el tamaño de memoria reservada es de 3 del tipo del puntero "3
caracteres = 3 bytes" ), como es un puntero constante no puedes hacer que
"A" apunte a otra direccion de memoria, ya que el puntero es
constante, y solo puede apuntar a la direccion de memoria asignada al inicio de
la aplicación.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">char A []="pepito";         //
"A" es igual que en el caso anterior, pero esta vez el tamaño de
memoria reservada al inicio de la aplicación es de 6 del tipo del puntero.</span></font></p>

<p style="text-indent: 35.4pt;"><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">"pepito
= 6 caracteres = 6 bytes" reservados.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">En ambos casos as inicializado el array,
esto significa que se ha reservado memoria para ellos.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Asi pues no puedes hacer:</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">char A[];           // Array sin
inicializar</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">A = "pepito";      // asignación
de una cadena a una direccion de memoria que no existe ya que no se ha
inicializado.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">En tu caso:</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font face="Times New Roman" size="3"><span style="font-size: 12pt;">char cadena[];  </span></font><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">// Array sin inicializar
</span></font><br>
cin >> cadena;<font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> // asignación de una cadena a una
direccion de memoria que no existe ya que no se ha inicializado.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Debes de inicializar el array con un
tamaño para que se reserve la memoria.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="black" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: black;">char cadena[50];</span></font><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">
           // Ahora cadena es un puntero constante a un espacio de
memoria de 50 del tamaño del puntero "50 char". Esto significa que
puedes asignar cadenas de hasta 50 caracteres, no mas, ya que solo hay memoria
para 50. del 0 al 49.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Tu otro ejemplo:</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font face="Times New Roman" size="3"><span style="font-size: 12pt;">char *pCadena;           <font color="navy"><span style="color: navy;">// "pCadena"
es un puntero "int", donde el bloque al que apunta es del tamaño de
un carácter "char"</span></font></span></font></p>

<p><font face="Times New Roman" size="3"><span style="font-size: 12pt;">cin >> pCadena;          <font color="navy"><span style="color: navy;">//"pCadena" es una puntero, esto significa que es un "int"
donde se almacena una direccion de memoria, a un puntero solo se le pueden
asignar direcciones de memoria, o lo que es lo mismo, punteros. Ya que los
punteros almacenan direcciones de memoria.</span></font></span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Bien con todo esto, veras que tienes que
saber de antemano el tamaño del array de memoria que quieres crear, asi que se
puede desperdiciar bastante memoria a la larga ya que lo ideal seria que si un
nombre tiene 6 caracteres se guardara en un espacio de memoria reservado de 6
caracteres y no en uno de 50.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Para esto ultimo hay que usar memoria
dinamica.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">Bueno espero no haberte liado mucho</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;">.:ZeLion:.</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;"> </span></font></p>

</div>

</div>



<br>_______________________________________________<br>Cconclase mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
</a><br><br><br></blockquote></div><br><br clear="all"><br>-- <br> | = David Reza = |