繁体   English   中英

指针和字符的分段错误

[英]Segmentation fault of pointer&char

我试图通过输入一些文件夹路径来制作提取文件名的程序。

结果很好,但问题是在结果的最后,有一些我无法弄清楚的分段错误。

这是我写的内容。

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

int main() {

char folderpath;
printf("enter the path : \n");
scanf("%s",&folderpath);



DIR   *d;
struct dirent *dir;
d = opendir(&folderpath);
if (d)
{
    while((dir= readdir(d)) != NULL)
    {
        printf("%s\n", dir->d_name);
    }
    closedir(d);

};

return 0;
}

而且,结果就像

enter the path : /Users/gui/Desktop/extract/extract
.
..
main
main.c
Segmentation fault: 11

很抱歉问这个非常简单的问题,我努力想弄清楚,但我不能。

感谢您阅读此问题。 最良好的问候。

当您使用%s格式说明符调用scanf时,它需要一个指向字符数组的指针。 你传递的是一个角色的地址。 因此,它将该变量的内存位置写入到它旁边的任何内容中。 这会调用未定义的行为

您需要将字符数组传递给scanf

char folderpath[256];
printf("enter the path : \n");
scanf("%s",folderpath);

...

d = opendir(folderpath);

你不可以做这个

char folderpath;
printf("enter the path : \n");
scanf("%s",&folderpath);

您为一个角色预留了空间。 你需要

char folderpath[MAX_PATH];
printf("enter the path : \n");
scanf("%s",&folderpath);

声明char foldrpath时,只分配了一个字节的内存,即只能存储一个字符。 当您尝试存储多个字节时,会导致分段错误(在这种情况下,您的进程空间可以访问内存位置)。 所以尝试使用像char folderpath [MAXFOLDERLENGTH]这样的数组,否则你可以通过调用malloc来获取连续的字节块,如char foldrpath =(char )malloc(MAXFOLDERLENGTH),这个malloc分配堆区域中的内存,其中前者声明将给你在堆栈区域分配的内存。 希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM