[英]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.