呼叫了不安全的sprintf,一開始自信滿滿覺得反正自己知道源和目的變數的記憶體,複製過去不會溢位的,所以就用這個不安全的函式吧
錯誤**:
int get_len(char *buffer, int len);
int dig = 0;
if(sprintf(temp,"%x",buffer[i]) == -1)
if(temp[0] >= 'a')else
sleep(1);
printf("afi:%d\n",i);
printf("num:%d %d\n",dig,num);
num = num*16 + dig;
} return num;
}
分別列印sprinf語句執行前後的i值,列印出來結果可以觀察到sprintf後i值被修改了,原因是printf("bei:%d\n",i);
printf("afi:%d\n",i);
sprintf(temp,"%x",buffer[i])
buffer[i]雖然是乙個位元組但是"%x"後變為4位元組,而temp就乙個位元組,所以產生溢位,而溢位時候又恰好修改了區域性變數i,所以最終死迴圈
shell 死迴圈if判斷 shell 死迴圈
例1 執行指令碼後會自動載入firefox瀏覽器,並開啟指定網頁。如果使用者關閉firefox,指令碼會再次自動重新開啟firefox。如需結束迴圈,中止t2.sh程序即可。注意不要同時執行兩個t1.sh指令碼,否則 若事先不知道指令碼名,也可以通過類似於 pstree grep firefox 的...
死迴圈和巢狀迴圈
死迴圈 也就是迴圈中的條件永遠為true,死迴圈的是永不結束的迴圈。例如 while true 在後期的開發中,會出現使用死迴圈的場景,例如 我們需要讀取使用者輸入的輸入,但是使用者輸入多少資料我們並不清楚,也只能使用死迴圈,當使用者不想輸入資料了,就可以結束迴圈了,如何去結束乙個死迴圈呢,就需要使...
死迴圈中的cin
在編寫程式時,遇到了乙個致命的問題,原本是想使用cin輸入乙個int型的數值,但是錯誤的輸入了char或者string型,導致程式進入死迴圈。類似程式如下 include using namespace std int main while i 0 return 0 定義了乙個int型的 i 但是當...