C/Visual C - imprimir cadena

   
Vista:

imprimir cadena

Publicado por eduardo (82 intervenciones) el 08/10/2007 18:01:41
Hola a todos quisiera que me ayudaran con un problemilla q tengo:
Deseo mostrar una cadena usando un ciclo while o for y mostrar caracter a caracter,
la he implementado de esta forma ya conocida pero el asunto es que muestra cadenas
cortas pero cuando le meto mas caracteres en el gets() se cierra el programa sin mostrarla
....

char *cad3;

printf( "ingrese cad3: " );
gets( cad3 );
printf( "cad3 es: " );
mostrar1( cad3 );
mostrar2( cad3 );

getche();
return 0;
}

void mostrar1( char *cadena ) {
int i = 0;

while( cadena[i] != '\0' ) {
printf( "%c", cadena[ i ] );
i++;
}
printf( "\n\n" );
}

void mostrar2( char *cadena ) {
int i;

for( i = 0; i < strlen(cadena); i++ ) {

printf( "%c", cadena[ i ] );
}
printf( "\n\n" );
}

ninguna funciona para mas de 4 palabras donde esta el error :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:imprimir cadena

Publicado por fernando.gomez (1604 intervenciones) el 08/10/2007 18:38:21
char *cad3;

printf( "ingrese cad3: " );
gets( cad3 );

Tienes un puntero a caracter sin inicializar y se la pasas al gets... A menos que gets te cree un búfer dinámico (lo que no hace, por cierto), tienes un comportamiento indefinido ahí.

char cad3[100]; // crea búfer de 99 caracteres de forma estática

char* cad3 = new char[100]; // crea búfer de 99 caracteres de forma dinámica
...
delete [ ] cad3;

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imprimir cadena

Publicado por eduardo (82 intervenciones) el 08/10/2007 18:52:53
Gracias Fernando por tu respuesta, pero aun asi no me queda claro no es cierto q al pulsar Enter al terminar de ingresar la cadena se ingresa el caracter nulo al final entonces la funcion deberia procesar y mostrar los caracteres hasta el final de la cadena pero no lo hace me funciona bien para una cadena pequenia pero no para más alla de 5 palabras...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imprimir cadena

Publicado por fernando.gomez (1604 intervenciones) el 08/10/2007 19:43:19
Sí, es cierto eso que mencionas, pero necesitas un espacio en memoria (búfer) dónde guardar esos caracteres, ¿no? Por eso es por lo que tienes que crearte una variable que contenga espacio suficiente. De ahí los ejemplos que te puse.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imprimir cadena

Publicado por eduardo (82 intervenciones) el 09/10/2007 17:54:42
ok fernando ya entendi bueno pensaba que el puntero reservaba un buen espacio para almacenar una cadena y como un puntero se puede indexar :( me equivoque.
Muchas gracias por responder
salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:imprimir cadena

Publicado por eduardo (82 intervenciones) el 09/10/2007 17:54:52
ok fernando ya entendi bueno pensaba que el puntero reservaba un buen espacio para almacenar una cadena y como un puntero se puede indexar :( me equivoque.
Muchas gracias por responder
salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar