执行时显示不需要的字符

undesirable character displayed when executing

我在执行我的程序时遇到了一些问题,一些字符突然出现(尤其是这个 : 有时还有其他字符),我不明白问题出在哪里以及如何删除它们。

谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <magic.h>
#include <string.h>

typedef struct Chaine
{
    char * Lachaine;
    int Taille_C;
} Chaine ;

char * test ( char*);
void ReccuperationTexte(char** txt);
void afficheTable2D(int** Table, Chaine * Tab_du_texte );
int * Tab_fin( int** Table, Chaine * Tab_du_texte );
char*Le_suff(int* tab_suf,Chaine *);
int ** Table2D ( Chaine *);
char* copietext ( char * , int );
int taille_texte (  char * fichier);
int main (void)
{

system("ls");
Chaine *Tab_du_texte=NULL;
Tab_du_texte=(Chaine*)malloc(sizeof(Chaine));
Tab_du_texte->Lachaine=NULL;
Tab_du_texte->Taille_C=0;
char fichier[50];
char * restest=NULL;
char * LeSuffixe=NULL;
LeSuffixe=(char*)malloc(sizeof(char)*50);
restest=(char*)malloc(sizeof(char)*15);
int **Table=NULL;
int* Tab_final=NULL;
int i;
Tab_final=(int*) malloc (sizeof(int)*100);
printf("tapez le nom du fichier s'il vous plais: ");
scanf(" %s",fichier);
restest=test(fichier);
while(strcmp( restest, "ASCII text") != 0 || strcmp( restest, "rien")==0)
{
    printf("il ne s'agit pas d'un fichier texte ou bien le fichier n'existe pas.\nVeillez choisir un autre:");
    scanf(" %s",fichier);
    restest=test(fichier);
}
printf("vous avez bien selectionné un fichier texte.\n");
Tab_du_texte->Taille_C= taille_texte (fichier);
/*copie du fichier texte dans un tab dynamique*/
Tab_du_texte->Lachaine=(char*)malloc(sizeof(char)*Tab_du_texte->Taille_C);
Tab_du_texte->Lachaine= copietext (fichier, Tab_du_texte->Taille_C);
printf("La chaine est: %s",Tab_du_texte->Lachaine);
fflush(stdin);
/*creation du tableau 2D */
Table=Table2D(Tab_du_texte);

afficheTable2D(Table,Tab_du_texte);
Tab_final=Tab_fin(Table,Tab_du_texte);
for(i=0;i<Tab_du_texte->Taille_C;i++)
printf("%d",Tab_final[i]);
LeSuffixe=Le_suff(Tab_final,Tab_du_texte);
printf("Le suff est:%s",LeSuffixe);
for(i=0; i<Tab_du_texte->Taille_C; i++)
{
        free(Table[i]);
}
free(Table);
free(restest);
return 0;
}
char * test ( char* ftest)
{
magic_t cookie;
const char *description;
char *res;
res=(char*)malloc(sizeof(char)*15);
cookie = magic_open(MAGIC_NONE);
if (cookie != NULL)
{
    /* on va charger la base de données */
    if (magic_load(cookie, NULL) == 0)
    {


        description = magic_file(cookie, ftest);

        if (description != NULL && strlen(description)<15)
            strcpy(res,description);
        else
        {
            res="rien";
        }
        magic_close(cookie);
    }
    else
        fprintf(stderr, "error loading the magic database\n");
}
return res;
}
int taille_texte (  char * fichier)
{
Chaine *Tab_Texte=NULL;
Tab_Texte=(Chaine*)malloc(sizeof(Chaine));
FILE* Texte= NULL;
Texte = fopen(fichier, "r");
fseek(Texte, 0, SEEK_END);
Tab_Texte->Taille_C=ftell(Texte);
return Tab_Texte->Taille_C;
}
char * copietext ( char * fichier, int taille_C)
{
char *Tab_Texte=NULL;
FILE* Texte= NULL;
Texte = fopen(fichier, "r");
fseek(Texte, 0, SEEK_SET);
Tab_Texte=(char*)malloc(sizeof(char)*taille_C);
fread(Tab_Texte,sizeof(char)*(taille_C),1,Texte);
return Tab_Texte;
}

int ** Table2D ( Chaine * Tab_du_texte)
{
 int i,j,k,t;
int** Table=NULL;
t=Tab_du_texte->Taille_C;
Table=(int**)malloc(sizeof(int*)*t);
for(j=0;j<t;j++)
Table[j]=(int*)malloc(sizeof(int)*t);

for(j=0; j<t; j++)   // Initialisation de la première ligne des i
    {
        Table[0][j]=0;
    }

    for(i=1; i<t ;i++)
    {
        for(k=0; k<i; k++)
        {

            Table[i][k]=0;

        }
        for(j=i; j<t; j++)
        {

            if(((Tab_du_texte->Lachaine[i]>=32 && Tab_du_texte->Lachaine[i]<=126) && (Tab_du_texte->Lachaine[j]>=32 && Tab_du_texte->Lachaine[j]<=126)) && Tab_du_texte->Lachaine[i-1]==Tab_du_texte->Lachaine[j])
            {

                Table[i][j]=Table[i-1][j-1]+1;

            }
            else 
            {

                Table[i][j]=0;

            }
        }
    }
return Table;
} 
void afficheTable2D(int** Table, Chaine * Tab_du_texte)
{
int i, j,t;
t=Tab_du_texte->Taille_C;
for(i=0; i<t; i++)
{
    for(j=0; j<t; j++)
    {
        if(i>j)
        printf(" ");
        else
        printf("%d",Table[i][j]);
    }
    printf("\n");
}
printf("\n");
}
int * Tab_fin(int** Table,Chaine * Tab_du_texte)
{
 int i,j,t;
t=Tab_du_texte->Taille_C;
int max =0;
int * Tab_suff=NULL;
Tab_suff=(int*)malloc(sizeof(int)*t);
Tab_suff[0]=0;
for (j=0;j<t;j++)
{
 for(i=0;i<=j;i++)
 {
     if (Table[i][j]>max)
        max= Table[i][j];

 }
 Tab_suff[j]=max;
 max=0;
 }
 return Tab_suff;
}

char*Le_suff(int* tab_suf,Chaine * Tab_du_texte)
{
int max,i,max_i,t;
char* suffixe=NULL;
t=Tab_du_texte->Taille_C;
max=0;

for(i=0;i<t;i++)
{
    if(max<tab_suf[i])
    {
        max=tab_suf[i];

    }
}
for(i=0;i<t;i++)
{
    if(max==tab_suf[i])
        max_i=i;
}
suffixe=(char*)malloc(sizeof(char)*max);
strncpy(suffixe,&Tab_du_texte->Lachaine[max_i-(max-1)],max);
printf("\n%s\n",suffixe);
return suffixe;
}

抱歉,代码没有很好地识别,但我稍后会修复它。 (节目是法语的)

很难读懂法语 c 代码....无论如何,我会再看一下 copietext 中的 fread。我不认为这会给你一个以零结尾的字符串。