我在调试一个代码,其中一个.ini文件正在读取字符串名为Timeout的值(将其读入名为rbuf的varibale中)。请告诉我.ini文件的内容何时条件如下:strlen in array
if((strlen(rbuf) > 0) && (rbuf[strlen(rbuf)-1] == '\n')){
rbuf[strlen(rbuf)-1] = '\0';
}
什么时候调试器进入上面的if循环? 请指定rbuf值的确切内容(缓冲区值)
我在调试一个代码,其中一个.ini文件正在读取字符串名为Timeout的值(将其读入名为rbuf的varibale中)。请告诉我.ini文件的内容何时条件如下:strlen in array
if((strlen(rbuf) > 0) && (rbuf[strlen(rbuf)-1] == '\n')){
rbuf[strlen(rbuf)-1] = '\0';
}
什么时候调试器进入上面的if循环? 请指定rbuf值的确切内容(缓冲区值)
当行具有“字符串长度”(任何大于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
。
很难与您所提供的信息说,但:
(strlen的(RBUF)> 0):RBUF中包含非空字符串 (RBUF [strlen的(RBUF)-1] ==' \ n'):rbuf包含以换行符结尾的字符串。
除此之外,rbuf可能只包含换行符。或者它可能包含一系列模板,并以换行符结束。
这3个strlen的伤害了我的眼睛。 – ruslik 2010-07-24 11:35:56
“如果循环”是经典的一年级学生俚语。精明,称它为“if语句”,因为它根本不是一个循环。 – SoapBox 2010-07-24 11:41:14
strchr()看起来更简单。 – Nyan 2010-07-24 11:53:34