簡體   English   中英

傳遞字符時出現分段錯誤

[英]Segmentation fault when passing char

這是我主要功能的一部分,我將char數組傳遞給get file_file(file)函數。

int main(int argc, char** argv) {
    char file[60];
    get_file(file);
    return (EXIT_SUCCESS);
}

這是我制作的get file方法。 我只希望它將“文件”返回給main方法,以傳遞給其他多個方法,但是根據調試,我在scanf語句之后直接遇到了分段錯誤。

    void get_file(char file) {
        printf("What file do you want?");
        scanf(" %s",file);
//do other stuff
    return file;
    }

filemain()的數組。 您必須使用pointer to char變量的pointer to char來接收它,因為array在發送給函數時會衰減為pointer

使用這樣的東西,

void get_file(char* file)

代碼中的另一個問題是返回類型。 如果要從該函數返回某些內容,則需要更改其返回類型(不應為void )並在調用函數中接收它。

在您的情況下,您不需要返回file ,因為輸入存儲在發送給該函數的地址中。

但是請注意,您需要指定要讀取的字符串的大小,否則可能導致緩沖區溢出。

scanf(" %59s",file);

一個char數組衰減 (當傳遞給函數時隱式轉換)到一個指針 ,而不是char 像這樣定義get_line

void get_file(char* file) {
    ...
}

代替。

一個char只能容納一個字符,因此會發生緩沖區溢出。 同樣, sizeof(char*)通常大於sizeof(char) == 1 ,因此地址被截斷並且可能變成無效地址。
但是,編譯器實際上應該發出一些警告。

您在get_file聲明中缺少*。 您想將指針傳遞給數組,而不是傳遞正電子本身的值。 這樣一來,您應該輸入

 void get_file(char* file)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM