2010-07-24 56 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可能只包含换行符。或者它可能包含一系列模板,并以换行符结束。