我正在尝试从目录中读取文件,并在其他目录中的“对应”文件中写入一些信息。为了获得新文件的路径和名称,我使用strncat函数连接了一些字符串。
我的问题是,strncat在某些字符串的开头添加了一些字符,但我不明白我在做什么错。

这是我的代码:

#define TRACES "../traces3/"
#define CSV "../csv/"

FILE* trace;
FILE* unite;
FILE* dizaine;

// Ouvre les fichiers de trace et de résultats
void ouverture (char* nom) {
    char* nTra;
    char* nUni;
    char* nDiz;
printf ("%s\n", CSV);

    nTra=malloc ((strlen (TRACES)+strlen (nom)+30)*sizeof (char));
    if (nTra==NULL) {
        printf ("Une erreure est survnue lors d'une allocation mémoire\n");
        perror ("malloc");
        exit (0);
    }
    strncat (nTra, TRACES, strlen (TRACES));
printf ("nTra : %s\n", nTra);
    strncat (nTra, nom, strlen (nom));

printf ("nTra : %s\n", nTra);

    nUni=malloc ((strlen (CSV)+strlen (nom)+30)*sizeof (char));
    if (nUni==NULL) {
        printf ("Une erreure est survnue lors d'une allocation mémoire\n");
        perror ("malloc");
        exit (0);
    }
    strncat (nUni, CSV, strlen (CSV));
printf ("nUni : %s\n", nUni);
    strncat (nUni, nom, strlen (nom)-3);
printf ("nUni : %s\n", nUni);
    strncat (nUni, "U.csv", 5);

printf ("nUni : %s\n", nUni);

    nDiz=malloc ((strlen (CSV)+strlen (nom)+30)*sizeof (char));
    if (nDiz==NULL) {
        printf ("Une erreure est survnue lors d'une allocation mémoire\n");
        perror ("malloc");
        exit (0);
    }
    strncat (nDiz, CSV, strlen (CSV));
printf ("nDiz : %s\n", nDiz);
    strncat (nDiz, nom, strlen (nom)-3);
printf ("nDiz : %s\n", nDiz);
    strncat (nDiz, "D.csv", 5);

printf ("nDiz : %s\n", nDiz);

    trace=fopen (nTra, "r");
    unite=fopen (nUni, "w");
    dizaine=fopen (nDiz, "w");

    free (nTra);
    free (nUni);
    free (nDiz);
}


这是终端的结果:

nom :    red-queueS1D16.tr
../csv/
nTra : ../traces3/
nTra : ../traces3/red-queueS1D16.tr
nUni : ../csv/
nUni : ../csv/red-queueS1D16
nUni : ../csv/red-queueS1D16U.csv
nDiz : ../csv/
nDiz : ../csv/red-queueS1D16
nDiz : ../csv/red-queueS1D16D.csv
nom :    red-queueS2D16.tr
../csv/
nTra : ../traces3/
nTra : ../traces3/red-queueS2D16.tr
nUni : ��$../csv/
nUni : ��$../csv/red-queueS2D16
nUni : ��$../csv/red-queueS2D16U.csv
nDiz : ../csv/
nDiz : ../csv/red-queueS2D16
nDiz : ../csv/red-queueS2D16D.csv
nom :   red-queueS17D19.tr
../csv/
nTra : ../traces3/
nTra : ../traces3/red-queueS17D19.tr
nUni : а$../csv/
nUni : а$../csv/red-queueS17D19
nUni : а$../csv/red-queueS17D19U.csv
nDiz : ../csv/
nDiz : ../csv/red-queueS17D19
nDiz : ../csv/red-queueS17D19D.csv
nom :   red-queueS17D18.tr
../csv/
nTra : ../traces3/
nTra : ../traces3/red-queueS17D18.tr
nUni : ��$../csv/
nUni : ��$../csv/red-queueS17D18
nUni : ��$../csv/red-queueS17D18U.csv
nDiz : ../csv/
nDiz : ../csv/red-queueS17D18
nDiz : ../csv/red-queueS17D18D.csv
nom :    red-queueS3D21.tr
../csv/
nTra : ../traces3/
nTra : ../traces3/red-queueS3D21.tr
nUni : а$../csv/
nUni : а$../csv/red-queueS3D21
nUni : а$../csv/red-queueS3D21U.csv
nDiz : ../csv/
nDiz : ../csv/red-queueS3D21
nDiz : ../csv/red-queueS3D21D.csv


那么,有人可以帮助我吗?

谢谢大家的帮助;)
幻影

最佳答案

这条线

strncat (nTra, TRACES, strlen (TRACES));



strncat (nUni, CSV, strlen (CSV));

将CSV连接到您希望为空的未初始化字符串中(即,您希望它们已在第一个字节中以0初始化)。

您可以通过以下方法解决此问题:

strcpy(nTra, TRACES)



strcpy(nUni, CSV)

关于c - strncat添加了一些意外字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27186115/

10-10 19:43