C/Visual C - Arrays con string

 
Vista:

Arrays con string

Publicado por Sara (3 intervenciones) el 05/09/2002 13:30:21
Deseo trabajar con arrays de string, en cuanto a los numéricos no tengo problema pero con estos ultimos me lio un poco.
Por ejemplo este programa me duvuelve NULL en las tres impresiones por pantalla.
#include<stdio.h>
#include <string.h>

void main()
{
char *lineas[10];
int ind=0;

strcpy(lineas[ind],"Jose Ruiz ");
ind=ind+1;
strcpy(lineas[ind],"Antonio Perez ");
ind=ind+1;
strcpy(lineas[ind],"Jose Perez ");
printf("\n%s",lineas[1]);
printf("\n%s",lineas[2]);
printf("\n%s",lineas[3]);
}
Soy nueva en esto por lo que pido perdon de antemano por molestaros
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:Arrays con string

Publicado por José Carlos García (11 intervenciones) el 05/09/2002 16:13:07
Hola Sara,
lo primero que debes hacer es mirarte un poco todo lo referente punteros. Debes tener cuidado al utilizar strcpy, ya que estás tratando de copiar cadenas en otras variables para las que no has reservado memoria (lineas[0], lineas[1],...,lineas[10]). Y otra cosa, fíjate que al imprimir estás empezando en el índice 1, en lugar del 0.

Un saludo.
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:Arrays con string

Publicado por chuidiang (677 intervenciones) el 05/09/2002 20:27:37
char linea[10] reserva espacio para 10 caracteres. Hasta ahi no hay problema.

char *lineas[10] esta reservando 10 punteros a caracter, que son linea[0], linea[1], ... linea[9]. Todos esos punteros no tienen espacio de memoria reservado para guardar cadenas. Debes reservar tu el espacio.

Si la cadena más grande es de, por ejemplo, 25 caracteres, tendrías que hacer lo siguiente:
for (i=0; i<10; i++)
lineas[i] = new char[25];

Ahora ya puedes rellenarlos como lo estabas haciendo.

Cuando no los necesites, debes liberarlos

for (i=0;i<10; i++)
delete [] lineas[i];

Otra opción más sencilla pero menos flexible, es hacer
char lineas[10][25];
Tendras que probar, porque no se muy bien si eso reserva 10 lineas de 25 caracteres o 25 líneas de 10 caracteres.

Se buena.
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:Arrays con string

Publicado por José Carlos García (11 intervenciones) el 06/09/2002 10:50:35
Oye chaval, te has columpiado con el uso de las instrucciones 'new' y 'delete' en lenguaje C. ¿No te suenan malloc(), calloc() y free()?

Un saludo.
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:Arrays con string

Publicado por Pepe (1 intervención) el 06/09/2002 10:56:29
tienes razón jCarlos, columpio total.
Pero no te asustes, chuidiang constesta siempre asi. El caso es contestar, sea como sea...
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:Arrays con string

Publicado por Sara (3 intervenciones) el 06/09/2002 13:28:00
He conseguido manejar las arrays inicializando

char linea[4][30]

muchas gracias chuidiang, pero se me queda la duda de tener que liberarlos depues. ¿Por que?

Se bueno tu también.
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:Arrays con string

Publicado por José Carlos García (11 intervenciones) el 06/09/2002 14:47:31
Hola Sara,
solucionando tu problema de esa forma estás usando lo que se llama memoria estática, por lo que no tienes que liberar nada de memoria. Si no supieras a priori el tamaño de tu estructura de datos 'linea', necesitarías usar memoria dinámica para ir reservando la memoria en función de las necesidades y en este caso sí que debe ser liberada.

Un saludo.
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:Arrays con string

Publicado por Alvaro (122 intervenciones) el 06/09/2002 19:59:40
Necesitas saber mas de punteros.
' char * ' es un puntero, una variable que guarda UNA DIRECCION DE MEMORIA.
si haces la asignacion:

char *str;
str = "Hola Mundo...";

Estas asignandole a str la direccion de memoria en la que el ejecutable guarda la cadena "Hola Mundo...".

Fijate en lo siguiente:
char *str;
char saludo[24];
strcpy(saludo, "Hola Mundo..."); // A saludo le asigna el string "Hola Mundo..."
strcpy(str, saludo); //Error.

fijate que str es una variable que guarda una direccion de memoria y no ha sido inicializada. Antes de strcpy puede haber tenido cualquier valor, supongamos que tenia NULL.
al hacer strcpy(str, saludo) se le esta diciendo al programa que en la direccion de memoria NULL copie el string "Hola Mundo...", lo cual no se puede.
El caso es peor si la direccion es una invalida cualquiera, que puede estar apuntando a cualquier parte de la memoria, al hacer la asignacion quisa donde estarias escribiendo el string "Hola Mundo..."
Es por esto que si usas un ' char * ' (punteros en general) y este va a ser utilizado para referenciar algo nuevo (a otra variable o string) debes asignarle memoria libre con malloc (de c) o new (de c++). esa memoria queda como ocupada hasta que la liberes con free (de c) o delete (de c++).
Suerte.
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:Arrays con string

Publicado por chuidiang (677 intervenciones) el 06/09/2002 21:41:20
Lo siento, soy de c++. Hace tiempo que no uso el malloc().

Se bueno.
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