Buona sera, ho da qualche tempo iniziato a programmare in c, e mi trovo di fronte a un problema che non riesco a risolvere. l'esercizio è il seguente:
Si scriva poi una funzione strmul(…) che, dati una stringa s (che dev’essere stata allocata dinamicamente) e un numero intero n, modifichi la stringa s, riallocandola e assegnandole il risultato della concatenazione di s con se stessa per n volte. Si noti che 1- s deve essere stata allocata dinamicamente (o la funzione non potrebbe deallocarlae sostituirla con una più lunga!)2 - sdeve essere opportunamente riallocata in modo da contenere esattamente il risultato della “moltiplicazione” (dimensione minima) 3- per essere modificata dalla funzione, la stringa s (che nell'ambiente del programma chiamante è un puntatore a carattere) deve essere passata per indirizzo. Esempio: s = “abC” -> moltiplicazione per 3 -> s = “abCabCabC”
io ho scritto questo programmino, ma non risulta funzionare. credo sia perchè la funzione non riesce ad agire sulla parte di memoria che ho allocato nello heap ma su delle sue "copie", ma non ne vengo a capo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void strmul(char *str, int n){
char *strmol;
int x;
if (n<=0)
free(str);
else if (n>1){
strmol=(char*)malloc(sizeof(char)*((strlen(str)*n)+1));
for(x=0; x<n; x++)
strcpy((strmol+(strlen(str)*x)), str);
free(str);
str=strmol;
}
}
int main(){
int molt;
char *pont;
pont=(char*)malloc(sizeof(char)*10);
gets(pont);
scanf("%d", &molt);
strmul(pont, molt);
puts (pont);
return 0;
}
grazie dell' aiuto!