我正在编写一个程序来列出文件夹中的文件。 在下面的代码中,它运行正常,但如果我取消评论
//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);
}
答案 0 :(得分:1)
char* folder_dest;
scanf("%s", folder_dest)
folder_dest
未在程序中初始化并指向随机存储器地址。然后,scanf
将在编写字符时调用未定义的行为。使用字符数组而不是char
指针。更好的解决方案是使用fgets
加sscanf
代替scanf
。