gpt4 book ai didi

c 中的第一个循环后,char 数组有一些垃圾

转载 作者:行者123 更新时间:2023-11-30 18:29:15 24 4
gpt4 key购买 nike

enter image description here

    while( (entry = readdir(dir_pointer)) != NULL)
{
char *fullpath = malloc(dir_len + strlen(entry->d_name) + 2);
printf("\nfullpath: %s\n", fullpath);
strcat(fullpath, dir); // concatenate file directory;
printf("\ndir: %s\n",fullpath);
strcat(fullpath, "/"); // concatenate "/";
strcat(fullpath, entry->d_name); // concatenate filename;
printf("\nfullpath: %s\n", fullpath); // print to check;

free(fullpath);
// close the file;



}

从输出来看,第一轮while循环工作正常,文件完整路径正确;

但是,对于第二轮,文件完整路径包含一些垃圾,

垃圾从哪里来?

如何解决这个问题,我尝试过 memset() 但没有用。

最佳答案

因为完整路径未初始化。在这种情况下,您不应该使用,也不需要使用 strcat(),但如果您希望它正常工作,只需将 strcat() 的第一个参数设置为有效字符串,可以是空字符串。

就在malloc()之后

if (fullpath == NULL)
exit(-1);
fullpath[0] = '\0';

之后,您可以使用 fullpath 作为 strcat() 的第一个参数。

你看,strcat()不好用,因为它扫描第一个参数检查null终止符,但是,在你的情况下,fullpath的内容 是不确定的,第一个字符可能是 '\0' 但不能保证。

您可以看到,每次将字符串传递给可能正在增长的 strcat() 时搜索 '\0' 终止符,效率会很低。

此外,由于您要在循环内使用free() fullpath,因此根本不要使用malloc()。您也可以使用 VLA(可变长度数组)或固定长度数组。调用 malloc()free() 并不便宜,您已经需要 strcpy() 或更好的 snprintf() 在这种情况下更合适。

关于c 中的第一个循环后,char 数组有一些垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374253/

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