从递归返回后,C指针值发生变化

时间:2017-01-17 08:52:49

标签: c recursion

在递归调用(backup(fileB,entry-> d_name,archive_file))之后,fileB和entry-> d_name的值发生了变化,为什么?我该如何解决这个问题?提前谢谢!

else if(S_ISDIR(h.kind))
{
    printf("\nits a directory #######\n");
    struct dirent* entry = NULL;
    DIR* dir = opendir(h.name);
    if (dir == NULL) {
        printf("Directory couldn't be opened\n");
        exit(1);
    }

    while ((entry = readdir(dir))) {
        printf("\n %s ********** \n %s ******* \n\n" , entry->d_name,fileB );
        if (strcmp(".", entry->d_name) != 0 && strcmp("..", entry->d_name) != 0) {
            printf("before recursion    entry= %s   ,  fileB= %s \n",entry->d_name,fileB);
            backup(fileB,entry->d_name, archive_file);
            printf("after recursion     entry= %s   ,  fileB= %s \n",entry->d_name,fileB);
        }
    }

    if (closedir(dir)) {
        printf("close dir error");
        exit(1);
    }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

首先在备份功能中,您应该更改const char* xxx的参数。因为你不打算修改那些。因此,您将在函数中创建一个新的char []或char *:

char tmp[]; //you might have to give tmp specific size, use strlen()
strcpy(tmp, path);
strcat(tmp, "/");
strcat(tmp, fileB);

不确定它是否能解决您的问题,但可能会解决。