blog
, programming-note
#include <stdio.h>
int main(){
char* str = NULL;
gets(str);
printf("%s\n", str);
return 0;
}
這樣的程式碼在編譯時是沒有問題的,
但在執行的時候,輸入完字串就會出現以下錯誤並結束程式:
Segment fault (core dumped)
為什麼呢?不是說在 C 裡面,字串是字元陣列,且陣列名稱代表指向陣列的指標嗎?
其實仔細想想,char*
是個指向字元的指標,char* str = "hello, world"
之所以可行,是因為它指向的是 hello, world
這個 literal 的關係。
這篇文章裡面提到,
char str[] = "hello, world"
與
char* str = "hello, world"
所代表的意義是不一樣的,前者是個陣列,後者則如前述所說,是個指向 literal 的指標。
因此,前述程式碼應改成:
#include <stdio.h>
int main(){
char str[MAX_SIZE];
gets(str);
printf("%s\n", str);
return 0;
}
並注意輸入的字串長度不能超過 MAX_SIZE
。
其實超過了也還是可以繼續執行,但在程式結束時會有以下錯誤情況:
*** stack smashing detected ***
Aborted (core dumped)
An input of string greater than size 10 causes corruption of gcc inbuilt protection canary variable followed by SIGABRT to terminate the program.You can disable this protection of gcc using option 即:stack smashing 是 GCC 的一种检测 “缓存溢出” 的保护机制.当分配的内存不够时,会继续执行;但是在程序结束返回时才出现错误提示
其原因為拜訪陣列時超過了陣列的合法長度,但程式會幫你延長,在結束執行時才告訴你錯誤。
如果你喜歡這篇文章,請按照程度替我按 1~5 個讚!
歡迎加入讚賞公民的行列!不需要花費任何金錢,只要你辦個帳號就可以按讚了!
由於在 Windows 搭配 WSL 的環境下,如果是以 Ubuntu (或者是你使用的 Distro)啟動的話,預設的目錄會是你的家目錄~。 雖然這個資料夾是實際存在於 Windows 裡的,但因為是 Windows Store 下載下來的 app 的關係,其路徑曲折離奇(?),如果有跨平台的檔案管理需求,會是一件麻煩事。 因此我想要將預設的目錄改成另外在 Windows 本身的環境下也比較好取用的地方,如果是這樣子的話就很簡單: 在 ~/.bashrc 的最後面加上 cd [你想要設定的目錄] 即可。 cd /directory/you/want 但這樣的設定會有 side effect。 比如說,如果你有使用 Microsoft Visual Studio Code 的話,應該知道能夠在裡面直接開啟終端機,且該終端機的目錄會直接使用你正開啟的資料夾。 但是用了以上的設定,不論你在哪個資料夾開啟終端機,路徑都會跑去你所設定的目錄。
Mar 18, 2021沒在下面提到的不是沒災難就是還沒打開用~ 基本上,紀錄類的東西(消費紀錄、電池紀錄)就不會一起備份下來了。 但 Safari 的瀏覽紀錄跟開啟的分頁倒是還在。 Face ID 要重新設定,沒得商量。密碼也是。 但有取用 Face ID 的 app 的設定倒是跟原本一樣。(例如:Suica 的 app 使用 Face ID 的這個設定還會是啟用的,也不用重新設定) LINE 對話紀錄、好友什麼的都還在,但主題的設定倒是跑掉了。
Sep 1, 2020以下為個人心得分享與紀錄,我的解決方法並不一定都適用,有任何疑問還是建議找專業人員的幫助 其實就等於在新硬碟重新安裝一次作業系統 XD。 把一些自己遇到的問題寫下來,做個紀錄,或許也能讓其他有遇到相同問題的人能夠更快找到答案。 重新安裝 Windows?那要重新授權 / 輸入金鑰 / 買系統嗎? 不用。 現在 Windows 10 已經改為線上驗證,序號將與 Microsoft 帳戶綁定,只要登入線上帳戶,舊能夠直接啟用授權。(但記得不要在安裝的時候就登入,原因在下面) 其技術應為綁定主機板,但這並非表示更換主機板就得重新買,詳情請見 https://support.microsoft.com/zh-tw/help/12440/windows-10-activate 。
Aug 7, 202030~59 我現在只會解黃金海岸,然後就去龜沼澤地的青蛇到可以解墮落城市的任務,農完之後就到青龍打到三轉了。 黃金海岸 此區段最推薦的系列任務。 地圖簡單:除了一兩次要回安全區以外,基本上就是一路打下去。 任務單純:不外乎是打指定數量的怪物、蒐集指定數量的物品。數量不會太多,有寵物就很好解決(沒有...也可以啦)。在打游泳圈的時候記得撿一下,下個任務就是要蒐集了。 里艾那海峽 很久沒解了,之前是在 60UP 時期解的,那時候要坐船(裡面的)跑來跑去,印象不是很好,所以現在都不解。記得比黃金海岸複雜一些。
Aug 7, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up