第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使char指針指向null會導(dǎo)致分段錯誤

使char指針指向null會導(dǎo)致分段錯誤

長風(fēng)秋雁 2021-04-09 17:18:30
在linux中,我正在嘗試下面的代碼,該代碼導(dǎo)致分段錯誤錯誤:int main(int arg_count,char *args[]){      char *buffer;    if(arg_count>1)      buffer = args[1];    else       *buffer = 0; }我知道指針指向只讀取部分內(nèi)存,因此我將第一次嘗試更改buffer[0]=0;為上面的內(nèi)容。但是我不明白為什么這個也不起作用?!
查看完整描述

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是一個不錯的選擇。


查看完整回答
反對 回復(fù) 2021-04-16
?
炎炎設(shè)計

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)存位置,然后要求用戶輸入。從這一點開始,您可以使用緩沖來做任何您想做的事情。


查看完整回答
反對 回復(fù) 2021-04-16
  • 3 回答
  • 0 關(guān)注
  • 420 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號