[英]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;
}
file
是main()
的數組。 您必須使用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.