gpt4 book ai didi

c - 字符串末尾的 ENQ

转载 作者:太空狗 更新时间:2023-10-29 16:12:48 24 4
gpt4 key购买 nike

我的程序出现了异常行为,让我解释一下:

函数如下所示:

void PrintDirTree(const char* dirName, size_t depth)

然后我有一个 while 循环,我在其中遍历目录并为下一个递归调用创建一个新字符串(printName 在“examplefolder/”之前设置):

char* newDir = (char*)malloc(strlen(dirName) + strlen(dirEntry->d_name) + 1);
if (newDir != 0) {
memset(newDir, 0, sizeof(*newDir));
strcat(newDir, dirName);

if (dirName[strlen(dirName)-1] != '/') {
//printf("%d\n", dirName[strlen(dirName)-1]); <-- there i get the '5'
strcat(newDir, "/");
}
strcat(newDir, printName);
PrintDirTree(newDir, depth + 1);
free(newDir); newDir = 0;
} else {
fprintf(stderr, "error allocating memory\n");
return;
}

有时(但每次都在同一个目录中)我在字符串 dirName 的末尾得到一个 ENQ(整数 5),它被放入下一个函数调用。这种不当行为会导致错误的 opendir() 调用。

最佳答案

你正在使用初始化内存

memset(newDir, 0, sizeof(*newDir));

这不会清除整个内存,因为 *newDir 只是一个字符。当您开始写入数组时,您将覆盖初始零,因此处于伪随机数据中。使用正确的大小清除它或使用 calloc 而不是 malloc。

关于c - 字符串末尾的 ENQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250489/

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