gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:45 25 4
gpt4 key购买 nike

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

//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);
}

最佳答案

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

folder_dest 未在您的程序中初始化并指向随机内存地址。 scanf 将在写入字符时调用未定义的行为。使用字符数组而不是 char 指针。更好的解决方案是使用 fgets 加上 sscanf 而不是 scanf

关于在 printf 之后调用 Opendir 时 C 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com