<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EstiloCorreo17
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:595.3pt 841.9pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=ES link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

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

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

<p class=MsoNormal style='margin-left:1.0cm'><b><font size=2 face=Tahoma><span
style='font-size:10.0pt;font-family:Tahoma;font-weight:bold'>De:</span></font></b><font
size=2 face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
cconclase-bounces@listas.conclase.net
[mailto:cconclase-bounces@listas.conclase.net] <b><span style='font-weight:
bold'>En nombre de </span></b><st1:PersonName w:st="on">David</st1:PersonName>
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><o:p></o:p></p>

</div>

<p class=MsoNormal style='margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'><o:p> </o:p></span></font></p>

<p class=MsoNormal style='mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:
12.0pt;margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'>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: <o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'>char cadena[];<br>
cin >> cadena;<o:p></o:p></span></font></p>

<p class=MsoNormal style='mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:
12.0pt;margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'><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:<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'>char *pCadena;<br>
cin >> pCadena;<o:p></o:p></span></font></p>

<p class=MsoNormal style='margin-left:1.0cm'><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'><br>
o algo así. <br>
<br>
Ojalá puedan orientarme. Saludos<br clear=all>
<br>
-------------------------<br>
| = <st1:PersonName w:st="on">David</st1:PersonName> Reza = | <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Hola <st1:PersonName w:st="on">David</st1:PersonName>.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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++<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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). <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Un ejemplo:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

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

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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” <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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” )<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Hasta aquí supongo que todo claro.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

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

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal style='margin-left:35.4pt;text-indent:-35.4pt'><font size=2
color=navy face=Arial><span style='font-size:10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal style='text-indent:35.4pt'><font size=2 color=navy
face=Arial><span style='font-size:10.0pt;font-family:Arial;color:navy'>“pepito
= 6 caracteres = 6 bytes” reservados.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

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

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Asi pues no puedes hacer:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>char A[];           // Array sin
inicializar<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>En tu caso:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>char cadena[];  </span></font><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>// Array sin inicializar</span></font><br>
cin >> cadena;<font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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><o:p></o:p></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

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

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:black'>char cadena[50];</span></font><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Tu otro ejemplo:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>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”<o:p></o:p></span></font></span></font></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>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.<o:p></o:p></span></font></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;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.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

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

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Bueno espero no haberte liado mucho<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>.:ZeLion:.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

</div>

</body>

</html>