語言雜記 0x0A

2021-08-28 18:22:44 字數 602 閱讀 2441

今天寫乙個字串反轉練練手,涉及到手動輸入字串時出現了一些問題

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 一樣 棧由編譯器自動生成釋放,而常量區的記憶...