- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从目录中读取文件并在其他目录中的“相应”文件中写入一些信息。为了获取新文件的路径和名称,我使用 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/
我想连接两个字符串,添加一个新的随机字符,使用 strncat() 所以基本上我是这样做的: #include #include #include #define CHARACTER_RANGE
如何将 strncat 与堆对象一起使用? 我试图编写一个简单的函数来将 2 个字符串连接在一起并返回结果,但是,如果不使返回缓冲区非常大(增加大约 5000 的长度)以使其不会溢出,我就无法运行它。
如何将 strncat 与堆对象一起使用? 我试图编写一个简单的函数来将 2 个字符串连接在一起并返回结果,但是,如果不使返回缓冲区非常大(增加大约 5000 的长度)以使其不会溢出,我就无法运行它。
我正在尝试从目录中读取文件并在其他目录中的“相应”文件中写入一些信息。为了获取新文件的路径和名称,我使用 strncat 函数连接一些字符串。我的问题是,strncat 在某些字符串的开头添加了一些字
我有以下代码: struct prefix rnp; char prefix[IPV6_PREFIX_STR_MAX_LEN]; ... strncat(prefix, "/", 1); <----
很抱歉,如果这太入门级,但我尝试实现strcpystrncat()的库函数如下: #include void strncat (char *s, char *t, int n) { // mallo
我正在编写一个 Web 服务器,我在其中通过 WinSock 套接字从客户端接收数据,并将数据解析为多个部分。然后,根据找到的方法和请求的资源,我想构建一个新的数据包,我将把它发送回客户端。 我有这个
我发现 string.h 标准库中的 strncat 函数有一些奇怪的行为,希望得到一些帮助以了解发生了什么。 我的问题的症结在于我创建的一个名为 readLine 的函数,目的是将文件的行作为 ch
首先,我编写了一个简单的程序。 1 #include 2 #include 3 #include 4 5 int main() 6 { 7 char *buf
我试图在 C 编程中连接两个字符串。这是我的代码: #include #include #include int main(int argc, char const *argv[]) {
考虑这段代码: limit = sizeof(str1)-strlen(str1)-1; strncat(str1,str2,limit); 如果 str2 长度大于 limit,strncat Nu
更新:关于 char、signed char 还是 unsigned 的问题最终没有意义。在这种情况下使用 memcpy 更合适,因为它对字节不加区别地工作。 不可能是一个更简单的操作,但我似乎错过了
我的 stringNAdd 函数将复制 strncat(原始)。我不能接受数组作为参数,但可以接受指针。我想知道我的代码是否正确? 固定代码如下: #include #include using
我无法弄清楚为什么我的 g++ 编译程序在调用 strncat() 时出现段错误。 我一直在这个网站和一般的谷歌搜索上跳来跳去,发现了许多类似的问题,但还没有找到适合我的解决方案。这是更大代码的一部分
假设我有一个大小为 10 个字符的数组(memset 为 0),我将其作为目标传递给 strncat,并且在源代码中我传递一个长度为 20 个字符的字符串(空终止),现在我应该将“计数”传递为 10
抱歉,我现在修改了代码: #include #include #include void main() { int i=0; char** f=NULL;
我有一个缓冲区,我正在做很多 strncat。我想确保我永远不会溢出缓冲区大小。 char buff[64]; strcpy(buff, "String 1"); strncat(buff, "Str
我想通过使用 strtok 和 strncat 为每个单词添加字符串“ay”。但似乎有一个我找不到的地方有冲突。它只给了我输出的第一个词“Computeray”。帮助? #include #incl
我有一个程序可以在缓冲区中连接一些字符串。 我之前用过strncpy。在网上查看了一些使用 snprintf 而不是 strncat 的建议后,我切换到 snprintf。但是,我注意到这部分程序(字
我正在尝试编写必须实现库函数 strncpy、strncat 和 strncmp 版本的代码,但运行时出现 Abort trap: 6 错误。任何想法都非常感谢: #include #include
我是一名优秀的程序员,十分优秀!