Problema locazione spazio

di il
6 risposte

Problema locazione spazio

Salve a tutti , sto cercando di scrivere questo programma in C, la cui traccia è:

Un file contiene una sequenza di stringhe alcune delle quali sono della forma #i, con i valore intero non negativo (si supponga che il carattere # non compaia nelle altre stringe del file).
Come esempio si consideri il seguente file
Il sottoscritto #0, nato a #1 il #2, chiede di poter #3 #8
                        Firma #11
                        #0
Roma, lì #4

Si scriva una funzione C che prende come parametri: (1) il valore n, (2) il nome del file di input contenente il testo suddetto, (3) il nome di un file di output (4) l’indirizzo iniziale punt_dati di un vettore di stringhe di dimensione n già presente in memoria, e scriva nel file di output il testo ottenuto sostituendo ad ogni stringa della forma #i del file di input la stringa corrispondente alla locazione i del vettore. Le stringhe della forma
# i con i = n devono essere sostituite tutte con la stessa stringa "...". Ad esempio, se n = 5 e punt_dati = { "Paolo Rossi", "Torino", "13/7/71", "essere ammesso", "15/6/96"}, allora il corrispondente file di output deve contenere il seguente testo:
Il sottoscritto Paolo Rossi, nato a Torino il 13/7/71, chiede di poter essere
ammesso ...
                                    Firma ...
                                    Paolo Rossi
Roma, lì 15/6/96
Quello che ho scritto sino ad ora è:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1200000

char **riempString(FILE *f1);
void riempFile(FILE *f1,FILE *fout,char string[]);

int main(int argc,char *argv[]){
	FILE *fp1;
	FILE *fp2;
	FILE *fpOut;
	char nomeFile1[MAX];
	char nomeFile2[MAX];
	char nomeFileOut[MAX];
	char *string;
    string=(char*)malloc(sizeof(char)*MAX);
	if(argc<4){
		printf("Inserisci il nome del primo file \n");
		scanf("%s",nomeFile1);
		printf("Inserisci il nome del secondo file \n");
		scanf("%s",nomeFile2);
		printf("Inserisci il nome del file di output \n");
		scanf("%s",nomeFileOut);
	}
	else if(argc==4){
		strcpy(nomeFile1,argv[1]);
		strcpy(nomeFile2,argv[2]);
		strcpy(nomeFileOut,argv[3]);
	}
	else{
		printf("Errore hai inserito troppi argomenti \n");
	}

	fp1=fopen(nomeFile1,"r");
	fp2=fopen(nomeFile2,"r");
	fpOut=fopen(nomeFileOut,"w");
    
    string=riempString(fp2);
    printf("%s",string[0]);
    riempFile(fp1,fpOut,string);

    fclose(fp1);
    fclose(fp2);
    fclose(fpOut);

    return 0;
}

char **riempString(FILE *f1){
    char *stringa;
    char *stringhe;
    int i=0;
    
    stringhe=(char*)malloc(sizeof(char)*MAX);
    while(feof(f1)==0){
        stringa=(char*)malloc(sizeof(char)*MAX);
        fgets(stringa,MAX,f1);
        stringhe[i]=stringa;
        i++;
    }
    return stringhe;
}

void riempFile(FILE *f1,FILE *fout,char string[]){
    int n=5;
    char *punti="...";
    int c,i,j;
    c=fgetc(f1);
    while(c!=EOF){
        if(c=='#'){
            fscanf(f1,"%d",&i);
            if(i<n){
                fprintf(fout,"%s",string[i]);
            }
            else{
                fprintf(fout,"%s",punti);
            }
        }
        else{
        	fputc(c,fout);
        }
        c=fgetc(f1);
    }
}
Ora il mio problema è che quando compilo e lo eseguo il risultato, non è quello sperato ma bensì questo, penso che sia un problema di locazione dello spazio:

Il sottoscritto (null), nato a (null) il (null), chiede di poter (null) ...
			Firma ...
			(null)
Roma, li (null) 
Vi ricordo che il programma ha bisogno di un file di Input.txt dove ci sono scritte le informazioni con numeri e cancelletti, un file da cui ricava le informazioni da sostituire nel file di Input, e un file di output con il risultato che è descritto anche nella traccia. Grazie mille in anticipo per la disponibilità

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte