我有這段代碼需要接受 3 個命令列引數,這些引數是數字,以便從華氏溫度轉換為攝氏溫度。我的所有程式都在程式中運行,但是如果在運行程式時未將其指定為引數,則將“step”變數更改為 int 1 時遇到問題。我添加了 if 陳述句來檢查引數是否存在,然后如果不存在則將值更改為 1,但它回傳分段錯誤。下面是 if 陳述句:
int step = atoi(argv[3]);
if(argc == 2){
step = 1;
return step;
}
下面是程式運行的結果:
root@computer:/home/sus/cyb126/homework$./temperature_chart 32 212
Segmentation fault (core dumped)
root@computer:/home/sus/cyb126/homework$./temperature_chart 32 212 20
32 0.000000
52 11.111111
72 22.222221
92 33.333332
112 44.444443
132 55.555557
152 66.666664
172 77.777779
192 88.888885
212 100.000000
我不明白為什么它通過編譯正常而沒有警告來回傳分段錯誤。我只能認為它出于某種原因不聽 if 陳述句。
感謝任何幫助。
在我得到以下很好的建議后,將代碼更改為以下內容:
int step;
if (argc == 2) {
step = atoi(argv[3]);
}
else {
step = 1;
}
uj5u.com熱心網友回復:
當您傳遞 2 個引數時,argv 陣列只有 3 個元素長(元素數始終為 argc 1)。這意味著通過訪問argv[3]您正在訪問三元素向量的第四個元素。這是越界訪問,您會遇到段錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336469.html
上一篇:矩陣求逆中的分割錯誤
下一篇:答案輸出空白
