我正在尝试从目录中读取文件,并在其他目录中的“对应”文件中写入一些信息。为了获得新文件的路径和名称,我使用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/