在printf之后调用Opendir时,C程序崩溃

时间:2014-06-16 19:50:49

标签: c crash printf opendir

我正在编写一个程序来列出文件夹中的文件。 在下面的代码中,它运行正常,但如果我取消评论

//printf("This makes the program crash.\n");

再次运行程序崩溃。它不会打印出“文件夹已打开”,因此它会在opendir上崩溃。如果我在getfiles函数中定义'd'而不是传入它,它也会崩溃。我正在使用MinGW进行编译。我的节目如下。

#include <stdio.h>
#include <dirent.h>

    void getfiles(DIR *d) {
        //DIR* d;
        struct dirent *dir;
        char* folder_dest;
        printf("Please enter name of upload folder.\n");
        scanf("%s", folder_dest);
        d = opendir(folder_dest);
        printf("folder opened\n");  //does not print when it crashes

        if (d) {
            while ((dir = readdir(d)) != NULL) {
                if( dir->d_type != DT_DIR) {
                    printf("%s\n", dir->d_name);
                }
            }
            closedir(d);
        }
    }

    int main(void) {
        DIR *d;
        //printf("This makes the program crash.\n");
        getfiles(d);
        return(0);
    }

1 个答案:

答案 0 :(得分:1)

char* folder_dest;
scanf("%s", folder_dest)

folder_dest未在程序中初始化并指向随机存储器地址。然后,scanf将在编写字符时调用未定义的行为。使用字符数组而不是char指针。更好的解决方案是使用fgetssscanf代替scanf