Ciao a tutti, devo ingrandire la grandezza di un buffer, perchè la grandezza finale mi è impossibile a sapere in fase di compilazione, io ho risolto cosi :
codice:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define BLOCK 64
int allunga ( char ** buffer, int size, int new_size) {
char *buffer_tmp = (char *)malloc(size);
//controlli
strncpy(buffer_tmp, *buffer, size); // salvo il vecchio buffer
free(*buffer);
*buffer = (char *)malloc( new_size);
strncpy(*buffer, buffer_tmp, size);
free(buffer_tmp);
}
int main() {
char * prova = (char *) malloc(BLOCK);
int i = 0;
for (i = 0; i < BLOCK; i++)
*(prova+i) = 'a';
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);
allunga(&prova, BLOCK, 2*BLOCK);
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);
strcat(prova,"PPPPPPPPPPPPPPP");
printf("SIZEOF : %d, STRLEN %d\n", sizeof(prova), strlen(prova));
puts(prova);
return 0;
}
Potrebbe essere una soluzione valida??
E poi esiste un modo per vedere quanta memoria è occupata da vettore allocato con mallloc? O provato ad usare anche calloc ma non cambia nulla...