2010-07-24 51 views
0

我在調試一個代碼,其中一個.ini文件正在讀取字符串名爲Timeout的值(將其讀入名爲rbuf的varibale中)。請告訴我.ini文件的內容何時條件如下:strlen in array

if((strlen(rbuf) > 0) && (rbuf[strlen(rbuf)-1] == '\n')){ 
    rbuf[strlen(rbuf)-1] = '\0'; 
    } 

什麼時候調試器進入上面的if循環? 請指定rbuf值的確切內容(緩衝區值)

+5

這3個strlen的傷害了我的眼睛。 – ruslik 2010-07-24 11:35:56

+1

「如果循環」是經典的一年級學生俚語。精明,稱它爲「if語句」,因爲它根本不是一個循環。 – SoapBox 2010-07-24 11:41:14

+0

strchr()看起來更簡單。 – Nyan 2010-07-24 11:53:34

回答

4

當行具有「字符串長度」(任何大於0的值,不包括空終止符)並且零終結符之前的最後一個字符是一個換行符,它將進入條件塊並將該換行符設置爲空終止符。

爲了告訴你rbuf的確切內容,我需要知道ini文件的內容。但是,舉例來說,如果你有一個線在它的文字,如:

i love programming

讓我們假設有在最後,如果它的未顯示的換行符。

然後RBUF將開始包含:

`我愛編程\ n \ 0'

那20個字節。 Strlen將返回19(不包括末尾的空終止符)。

rbuf [strlen(rbuf)-1]將是'\ n'字符(在緩衝區中的索引18處)。

所以,你的代碼會看到一個新行的索引爲18,並將其設置爲「\ 0」,所以你最終:

i love programming\0\0

在你的緩衝區

0

很難與您所提供的信息說,但:

(strlen的(RBUF)> 0):RBUF中包含非空字符串 (RBUF [strlen的(RBUF)-1] ==' \ n'):rbuf包含以換行符結尾的字符串。

除此之外,rbuf可能只包含換行符。或者它可能包含一系列模板,並以換行符結束。