gpt4 book ai didi

c - strncat 添加了一些意外的字符

转载 作者:行者123 更新时间:2023-11-30 17:24:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com