3 回答

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
函數(shù)的最后一行*buffer = 0
試圖設(shè)置指針引用的值buffer
。
由于buffer
從未初始化過,因此包含一個不確定的值,因此取消引用buffer
很可能導(dǎo)致段錯誤。
對于大多數(shù)項目,您永遠(yuǎn)不要自己編寫參數(shù)解析代碼。有許多健壯和高效的庫會比您(或我)做得更好。當(dāng)您在Linux GNU上編寫C語言時,getopt是一個不錯的選擇。

TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊
如果逐行瀏覽程序,您會看到,如果用戶不傳遞任何參數(shù),則buffer只是一個隨機(jī)值。如另一條評論所述,您需要對其進(jìn)行初始化。在您的情況下,我認(rèn)為您實際上不希望將值0放在緩沖區(qū)所指向的內(nèi)存地址中。這是顯示如何處理參數(shù)的代碼
int main(int argc, char **argv){
char *buffer = NULL;
if(argc > 1){
buffer = argv[1];
}
else{
buffer = malloc(1024);
puts("please enter an argument");
fgets(buffer, 1024, stdin);
//do stuff with buffer
free(buffer)
}
return 0;
}
在程序上方的代碼中,檢查是否有任何參數(shù)傳遞給程序,如果沒有參數(shù)傳遞,則程序分配1024字節(jié)并將緩沖區(qū)指向該內(nèi)存位置,然后要求用戶輸入。從這一點開始,您可以使用緩沖來做任何您想做的事情。
添加回答
舉報