我現在面臨着strlen的某些問題(有很多情況下,我讀取文件和字符串不是零終止)。所以我正在考慮製作一個裝配例程來計算我的琴絃長度。我會做的只是從字符串的末尾往後走,直到遇到我的第一個字符,然後計算字符串的長度。事實上,當我編寫彙編程序時,我已經有了一個我以前寫過的。彙編中的字符串長度例程作爲C++中strlen的替代者
現在,我想知道,我有什麼理由不應該這樣做?我會失去什麼特別的優勢?
另一種替代方法是將我的字符數組的每個成員都設爲null。我可以一次完成4個字節的彙編,甚至通過一個簡單的for循環。
請記住,我正在談論相當大的數組[64k]。由於我需要在用戶選擇文件時立即顯示文件,因此處理的速度非常快。
編輯: 爲了澄清,說,我知道,我知道字符串的長度,我的意思是:
char* buffer = new char[length];
我知道length
。但是當我填充這個緩衝區時,我不知道具有ascii字符的確切長度。當我使用strlen
時,它不會給我當前的長度。基本上length
可以是500,但其中只能有5個有效字符,其餘的495可能是垃圾值。
「我會從字符串末尾往後走,直到遇到我的第一個字符。」如果你知道字符串開始和結束的位置,爲什麼不使用減法來計算字符串長度? –
標籤爲'C++',我會問你爲什麼不使用'std :: string'。另外,你的描述似乎表明你知道字符串的「結束」,但不是開始(「直到遇到我的第一個字符時才倒退),這使得很難確切地遵循你如何進入這種情況有用。你怎麼知道結局?你怎麼知道你什麼時候到達「我的第一個角色」?如果你知道開始和結束,那麼長度就是'len = end - start'。 – Chad
「有很多情況下,我讀取文件和字符串不是零終止」您是否考慮使用某些內容來讀取實際上執行NULL的文件 - 終止字符串?或者甚至更好,如果你知道字符串在哪裏開始和結束的地方......你已經*知道它的長度。 –