【发布时间】:2014-06-16 19:50:48
【问题描述】:
我正在编写一个程序来列出文件夹中的文件。 在下面的代码中,它运行良好,但如果我取消注释
//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);
}
【问题讨论】:
-
首先要做的是回显您的输入。您应该检查来自
scanf()的返回值——如果它不是 1,则根本不应该使用该值。然后你应该打印你的程序实际得到的字符串:printf("Got: <<%s>>\n", folder_dest);——然后你可以看到它在做什么,而不是猜测。但是您没有像ouah diagonsed 那样分配空间,这是造成麻烦的主要原因。