簡體   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