今天寫乙個字串反轉練練手,涉及到手動輸入字串時出現了一些問題
char s;
scanf
("%s"
,s);
採用字元陣列的方式輸入的時候完全沒有問題,但是採用下面的方式的時候就會報錯
核心以轉儲
char
*s;scanf
("%s"
,s);
什麼是核心已轉儲呢?
通俗的理解就是訪問了不能訪問的內容,如下:
所以我們的char* s不可以用scanf手動輸入字串的原因就是因為char *s僅僅是乙個指標,並沒有為其分配空間,所以我們在使用scanf訪問的時候就會發生訪問不存在的記憶體的問題。
改進:
char
*s =
(char*)
malloc
(sizeof
(char*)
);scanf
("%s"
,s);..
.free
(s);
記得釋放記憶體哦! 徹底搞定0x0d和0x0a
我只在arm linux c和vc 下做了試驗,請大家在接觸其它語言環境下,小心推廣,不行就自己動手做試驗,最可靠。在arm linux c和vc 下回車換行的意義如下。回車 cr ascii碼 r 十六進製制,0x0d,回車的作用只是移動游標至該行的起始位置 換行 lf ascii碼 n 十六進製...
關於0x0d與0x0a的ASCII。
今天發現乙個有趣的現象 在 ma 我用的版本是6.11 中作彙編時發現,0x0d與0x0a有著不同的作用。比如 dead for dream 在這個字串後只加上0x0d則得到 游標移到開頭的那個d下面,而沒有換行 再輸入字元的話,將原來的字元著改掉。在這個字串上只加上0x0a則得到 游標移到末尾m字...
C語言雜記 0x0B
首先看兩個例子 一 二 這兩個例子裡面不同的地方就是s的不同,c語言程式在執行的時候記憶體分配有這樣的規則 區域性變數在棧中自動生成記憶體,比如上面所說的s就是在棧中生成記憶體 而s 指向的內存在常量區,就類似於我們在所有程式之前宣告char s 100 一樣 棧由編譯器自動生成釋放,而常量區的記憶...