Salve a tutti. Ho un problema con questo programma. Praticamente carico in memoria delle stringhe da un file con la funzione fgets() e normalizzo stringa per stringa, cioè elimino spazi in testa ed in coda(trim), spazi doppi, segni di punteggiatura e se il carattere è minuscolo lo trasformo in maiuscolo. Il mio problema sta nel fatto che se leggo una stringa di spazi bianche, quando faccio il trim dovrebbe diventare vuota, cioe con s[0]='\0', però quando scrivo su file mi riscrive la stringa bianca che non voglio, perchè? non dovrebbe scrivere nulla?
Ecco il codice:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define dmax 100

typedef char stringa[dmax+1];

void trim(char *string);
void normalizza(char *s);

int main()
{
	stringa EL[dmax];
	int i=0;
	int dim=0;
	char nomefile[30];
	FILE *fp;
	printf("Inserisci il nome del file che intendi normalizzare: ");
	gets(nomefile);
	fp=fopen(nomefile,"r");
	if(fp==NULL) printf("ERRORE\a\a\a");
	else
	{
		while((fgets(EL[i++],dmax,fp))!=NULL);
		dim=i;
		for(i=0;i<dim;i++)
		{
			normalizza(EL[i]);
		}
		fp=fopen(nomefile,"w");
		for(i=0;i<dim;i++)
		{
		    if(strlen(EL[i])!=0)
			fputs(EL[i],fp);
		}
	}
	system("pause>nul");
	fclose(fp);
	return 0;
}

void trim(char *string)
{
	char s2[dmax];
	int i,j,dim;
	for(i=0;string[i]==' ';i++);
	dim=strlen(string);
	while(isblank(string[dim-1]))
		  dim--;
	for(j=0;i<dim;j++,i++)
		s2[j]=string[i];
	s2[j]='\0';
	strcpy(string,s2);
}

void normalizza(char *s)
{
	int i,j=0;
	char s2[dmax+1];
	for(i=0;i<strlen(s);i++)
	{
		if(!(ispunct(s[i])) && !(s[i]==s[i+1] && s[i]==' '))
		{
			if(s[i]>='a' && s[i]<='z') s[i]=s[i]-'a'+'A';
			s2[j++]=s[i];
		}
	}
	s2[j]='\0';
	for(i=0;i<strlen(s2);){
	    if(s2[i]==s2[i+1] && s2[i]==' ')
	    for(j=i;j<strlen(s2);j++)
	        s2[j]=s2[j+1];
	else i++;}
	if(strlen(s2)!=0) trim(s2);
	strcpy(s,s2);
}