有人可以帮我理解这段代码:
char *line = new char[2048];
char *probableCauseStr = new char[512];
char *additioanl_text = new char[512];
long holdPeriod = 0;
while( !f.eof() ) {
f.getline( line, 2048 );
//
// find the ',' seperator
//
char* p = StrMgt::strchr( line, ',' );
if( !p ) continue;
*p = '\0';
p++;
if( sscanf( line, "%s%s", probableCauseStr, additioanl_text ) != 1 ||
sscanf( p, "%ld%s", &holdPeriod, additioanl_text ) != 1 ) continue;
....
我想弄清楚字符指针p会发生什么。
答案 0 :(得分:2)
char指针p
递增到下一个char,然后第二个sscanf
从递增指针指向的内存位置读取数据。
从代码中,我可以说p
增加的原因,因为最初p
的第一个字符被赋予了\0
。因此它会递增到下一个char,使其指向一个整数值,以便sscanf
可以使用%ld
说明符读取它。在此之后,sscanf
将使用%s
说明符读取字符串。
答案 1 :(得分:2)
p
用于查找第一个逗号并将其替换为\0
(这是C风格字符串的字符串结尾,特别是对于sscanf)。然后p
递增以指向下一个字符。
所以像
这样的字符串"Hello world, 100000"
变为
line -> "Hello world"
p -> " 100000"
然后尝试两个sscanfs,检查哪一个返回1(这意味着它正好解析了1个值)。在这个例子中,第一个sscanf会返回2(因为有两个单词),所以第二个将被调用,并返回1,holdPeriod
得到值100000
。