Autor
|
Tema: Ayuda con fgets y arrays (Leído 3,218 veces)
|
jomag
Desconectado
Mensajes: 5
|
Hola, estoy intentando de escribir código para almacenar cada linea de un fichero en una array de punteros de cadenas. Para leer cada linea del fichero utilizo la función fgets y después asigno cada linea a una posición de mi array de punteros cadena. Si pudierais echarle un vistazo os lo agradeceria mucho, porque mi problema es que todas las posiciones de mi array de punteros acaba con la ultima linea del fichero, es decir sobrescribe todas las posiciones con la ultima linea. Os dejo el codigo: int parse_probes() {
FILE* pf; char buf[100]; char *probes[100]; int i;
if ((pf = fopen( "/archivo", "r")) == NULL) { puts("Error abriendo archivo"); exit(1); } for (i = 0; i < 10; i++) { if (fgets(buf, MX, pf) != NULL) { probes[i] = buf; printf("%d %s %s \n", i, probes[i], probes[0]);
} } fclose(pf); return 0;
}
|
|
|
En línea
|
|
|
|
jomag
Desconectado
Mensajes: 5
|
Solucionado, tenia que reservar espacio para el array de punteros:
probes = malloc((strlen(buf)+1) * sizeof(char));
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Solucionado, tenia que reservar espacio para el array de punteros:
probes = malloc((strlen(buf)+1) * sizeof(char));
umm pensaba que tenia que convertirse esa sentencia al tipo de variable al que se le tiene que reservar memoria pues malloc o calloc devuelven un valor tipo void, pero ya lo probe y funciona, supongo que el mismo compilador realiza la conversión para evitar inconvenientes. bien por ti, te superas solito
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
pensaba que tenia que convertirse esa sentencia al tipo de variable al que se le tiene que reservar memoria pues malloc o calloc devuelven un valor tipo void, pero ya lo probe y funciona, supongo que el mismo compilador realiza la conversión para evitar inconvenientes. Depende del lenguaje. En C no es necesaria (y no se recomienda) la conversión de un puntero de tipo "void *" al tipo apropiado. En C++ es obligatoria la conversión pero en lugar de malloc y calloc se recomienda el uso del operador new ya que este llama al constructor del objeto y resulta en un puntero del tipo correcto. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Depende del lenguaje.
En C no es necesaria (y no se recomienda) la conversión de un puntero de tipo "void *" al tipo apropiado.
No se recomienda???, yo habia leido justo lo contrario en un libro de johanes aguilar, y ese tipo esta al nivel de Deitel... En C++ es obligatoria la conversión pero en lugar de malloc y calloc se recomienda el uso del operador new ya que este llama al constructor del objeto y resulta en un puntero del tipo correcto.
Un saludo
por supuesto en eso tienes toda la razón, solo que aún no he llegado a ese punto, todavia sigo con C, voy a mi propio ritmo y analizar muy bien esas cosas.
|
|
|
En línea
|
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
yo defiendo a johanes aguilar, es un muy buen autor, me ha sacado más de una vez de un apuro. hasta en cplusplus veo referencias de conversión, en cuanto a los retornos de malloc, es justamente por eso que detesto malloc, porque no inicializa las posiciones de memoria que reserva, por eso prefiero calloc, que las inicializa a cero, para no tener errores de segmentación al momento de referenciar esas posiciones de memoria. http://www.cplusplus.com/reference/cstdlib/malloc/function <cstdlib> malloc
void* malloc (size_t size);
Allocate memory block Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
If size is zero, the return value depends on the particular library implementation (it may or may not be a null pointer), but the returned pointer shall not be dereferenced.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
yo defiendo a johanes aguilar, es un muy buen autor, me ha sacado más de una vez de un apuro. No lo digo de forma despectiva ni como un ataque personal al autor, simplemente si es un libro de C y recomienda la conversión del retorno de malloc esta equivocado. hasta en cplusplus veo referencias de conversión Cierto pero ese sitio esta enfocado en C++ y en este la conversión es requerida. en cuanto a los retornos de malloc, es justamente por eso que detesto malloc, porque no inicializa las posiciones de memoria que reserva, por eso prefiero calloc, que las inicializa a cero, para no tener errores de segmentación al momento de referenciar esas posiciones de memoria. Si el bloque debe reservarse e inicializarse a cero se llama a calloc, si el contenido no importa se llama a malloc, al final del día cual de las dos utilizar depende del programa. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Si el bloque debe reservarse e inicializarse a cero se llama a calloc, si el contenido no importa se llama a malloc, al final del día cual de las dos utilizar depende del programa.
Un saludo
Diras del programador vale ya entiendo el punto slds
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Arrays con clases? [AYUDA]
Programación Visual Basic
|
EstoyBaneado
|
5
|
2,252
|
13 Septiembre 2005, 17:58 pm
por EstoyBaneado
|
|
|
ayuda con los arrays!!!
Programación C/C++
|
lourdes
|
7
|
4,408
|
7 Enero 2011, 18:04 pm
por Littlehorse
|
|
|
Duda con arrays dentro de arrays
« 1 2 »
PHP
|
Servia
|
11
|
7,214
|
10 Marzo 2011, 09:04 am
por Servia
|
|
|
Ayuda con arrays
« 1 2 »
Programación C/C++
|
norris
|
10
|
4,957
|
18 Noviembre 2012, 19:58 pm
por norris
|
|
|
Ayuda con fprintf y fgets [Solucionado]
Programación C/C++
|
Luchoz95
|
5
|
4,490
|
21 Abril 2013, 17:31 pm
por dato000
|
|