C 字符串末尾的ENQ
我的程序中出现了一种奇怪的行为,让我解释一下: 函数如下所示:C 字符串末尾的ENQ,c,string,posix,C,String,Posix,我的程序中出现了一种奇怪的行为,让我解释一下: 函数如下所示: 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){ m
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]);您正在使用初始化内存
memset(newDir, 0, sizeof(*newDir));
这不会清除整个内存,因为*newDir只是一个字符。当您开始写入数组时,您正在覆盖初始零,因此是伪随机数据。请使用正确的大小清除它,或者使用calloc而不是malloc。dirName
可能是“”。需要确保在阵列开始之前您不会访问
// if (dirName[strlen(dirName)-1] != '/')
if (dirName[0] && dirName[strlen(dirName)-1] != '/')
malloc()
太小。潜在的/
顺便问一下:printName
与dirEntry->d_name
有什么关系
// char* newDir = (char*)malloc(strlen(dirName) + strlen(dirEntry->d_name) + 1);
char* newDir = malloc(strlen(dirName) + strlen(printName) + 1 + 1);
@关于初始化,fpw是正确的
// memset(newDir, 0, sizeof(*newDir));
// strcat(newDir, dirName);
strcpy(newDir, dirName);
您是否至少需要strlen(dirName)+strlen(…->d_name)+2?一个字节用于终端“\0”,一个字节用于可能的“/”路径分隔符?
// memset(newDir, 0, sizeof(*newDir));
// strcat(newDir, dirName);
strcpy(newDir, dirName);