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 :
Potrebbe essere una soluzione valida??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; }
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...

Rispondi quotando