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