Problema funzione moltiplica stringhe

di il
2 risposte

Problema funzione moltiplica stringhe

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!

2 Risposte

  • Re: Problema funzione moltiplica stringhe

    Come parametro devi passara un puntatore al puntatore a carattere
    char **str
    All'interno della funzione devi usare str così ad esempio
    strlen(*str)
    Dopo che hai fatto il free di *str la devi riassegnare con il nuovo buffer/stringa allocato.
    Quando chiami la funzione ricordati di passare l'indirizzo del puntatore
    &pont
    Buon lavoro
  • Re: Problema funzione moltiplica stringhe

    Ciao, grazie mille funziona perfettamente!
Devi accedere o registrarti per scrivere nel forum
2 risposte