為什麼檔案含有的字元數多了一?

2021-08-20 09:16:21 字數 1339 閱讀 5867

在閱讀《the c programming language》(2nd edition)(俗稱k&r)時,動手實現了書中的部分示例**,結果出現了乙個問題,在stackoverflow上進行了問詢才得到了解決,由於原題是英文,故翻譯成博文與大家分享。

問題描述:

vim中建立乙個檔案如下:

a vbbe

並且在建立檔案的末尾一行時,輸入e之後,沒有按回車鍵。

那麼分析一下這個檔案應該含有那些字元呢?

第一行應該有這樣四個字元:'a',' ','v','\n'

第二行應該有這樣三個字元:'b','b','\n'

第三行應該有乙個字元:'e'

注意我們分析的依據是:建立檔案的末尾一行時,輸入e之後,沒有按回車鍵。故沒有\n'字元在最後一行結尾。那麼現在檔案中應該一共有8個字元,我們使用k&r中的計數字元數量的示例**進行計數:

#include

/* count characters in input; 1st version */

int main()

printf("%ld\n", nc);

return

0;}

結果是9。

甚至我們可以使用bash命令wc來進行計數,最後的結果還是9.

為什麼呢?

解答:在電腦科學的傳統中,我們傾向於讓檔案中的每一行都以乙個'\n'字元結尾,也因此,許多流行的,常用的文字編輯器,如vim, gvim, nano, gedit都會自動在檔案結尾加入乙個'\n'字元,無**件的最後是不是'\n'字元。這也就解釋了為什麼字元數量是9.因為vim自動增加了乙個'\n'字元。

想要真正的視覺化乙個檔案中的所有字元,我們可以在linux下使用hexdump -c命令,如下

$ hexdump -c test

00000000

6120

760a 62

620a 65

0a |a v.bb.e.|

00000009

延伸閱讀

這個**是解釋為什麼我們傾向於讓檔案每行以'\n'字元結尾

接下來就是知道如何使得文中提到的編輯器不再自動再檔案尾增加換行符

這兩篇文章都是英文,由於時間原因,未能翻譯,見諒!

批量刪除檔名中共同含有的字元 python實現

本文用到的函式 os.chdir 該函式用於改變當前工作目錄到指定的路徑,常用的語法格式為 os.chdir path 其中path為要切換到的新路徑,這裡如果新路徑允許訪問則返回true 否則返回false。思路 先使用os.chdir 函式將工作目錄定位到指定path,然後使用listdir 函...

檔案頭多了乙個 ufeff字元

在學習python從檔案中讀取檔案,並將檔案中的字串轉化為列表的時候,發現檔案頭多了乙個 ufeff字元。這個問題前段時間也遇到過了,同樣是上網搜尋了半天才解決,當時只是把問題解決就過去了,但是今天遇到同樣的問題時,知道有這麼乙個解決方法,但是怎麼做就是想不起來。古人云,好記性不如爛筆頭,一點沒錯。...

處理生成檔名稱時含有的特殊字元

處理生成檔名稱時含有的特殊字元 private shared function replacestring byval strvalue as string as string 特殊字元為 strvalue strvalue.replace strvalue strvalue.replace str...