Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/12/2012, 20:48
Avatar de guzzano
guzzano
 
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 14 años, 5 meses
Puntos: 13
Respuesta: Agregar más espacio a un char

Muchisimas gracias Fw, tengo una duda referente al tema. Leí un poco acerca de realloc, logre hacero funcionar pero guiandome por otro ejemplo, por lo tanto no entiendo por que funciona así y a mi modo no.


Así fue como lo hice funcionar pero dejandome llevar por otro ejemplo.
Código C:
Ver original
  1. int main(int argc, char *argv[]) {
  2.     DIR* PORTS_DIRECTORY;
  3.     struct dirent *PORTS_FILES;
  4.    
  5.     char *PORTS;
  6.     int PORTS_SIZE = 0;
  7.  
  8.     if ((PORTS_DIRECTORY = opendir(PATH_PORTS)) != NULL) {
  9.         while ((PORTS_FILES = readdir(PORTS_DIRECTORY)) != NULL) {
  10.             if (*PORTS_FILES->d_name == '.') {
  11.                 continue; }
  12.            
  13.             if (PORTS_SIZE == 0) {
  14.                 PORTS = realloc(NULL, strlen(PORTS_FILES->d_name));
  15.                 strcat(PORTS, PORTS_FILES->d_name); }
  16.             else {
  17.                 PORTS = realloc(PORTS, strlen(PORTS_FILES->d_name)+PORTS_SIZE);
  18.                 strcat(PORTS, PORTS_FILES->d_name); }
  19.  
  20.             PORTS_SIZE += strlen(PORTS_FILES->d_name); }}
  21.  
  22.     printf("%s", PORTS); }

Y así es a mi forma que no funciona.

Código C:
Ver original
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <dirent.h>
  5. #include <string.h>
  6.  
  7. #define PATH_PORTS "/usr/ports/"
  8.  
  9. int main(int argc, char *argv[]) {
  10.     DIR* PORTS_DIRECTORY;
  11.     struct dirent *PORTS_FILES;
  12.    
  13.     char* PORTS;
  14.     int PORTS_SIZE = 0;
  15.  
  16.     if ((PORTS_DIRECTORY = opendir(PATH_PORTS)) != NULL) {
  17.         while ((PORTS_FILES = readdir(PORTS_DIRECTORY)) != NULL) {
  18.             if (*PORTS_FILES->d_name == '.') {
  19.                 continue; }
  20.  
  21.             PORTS = realloc(PORTS, strlen(PORTS_FILES->d_name)+PORTS_SIZE);
  22.             PORTS_SIZE += strlen(PORTS_FILES->d_name);
  23.             strcat(PORTS, PORTS_FILES->d_name); }}
  24.  
  25.     printf("%s", PORTS);
  26.     free(PORTS); }

¿Tengo que asignarle algo a PORTS antes de usar realloc? iniciandole algo tampoco me funciona.


Saludos.