我正在用C语言设计一个程序来检测令牌。
我在第四行感到困惑。(right-left+2)
做什么?
char* sub_string(char* str, int left, int right)
{
int i;
char* sub_str = (char*) malloc(sizeof(char)*(right-left+2)); /* 4th line */
}
在这种情况下,right-left+2
将是right-left+1+1
其中righ-left
是从左到右的长度,但不计算左的长度。因此,一个+1。
另一个+1用于生成一个额外的空间字符,很可能用于添加0终止。
顺便说一下,该函数缺少一个干净的return
语句。
例如(感谢David C.Ranking的示例想法("more this than that"
中的"this"
:
more this than that
0 5 8
't'
处于left
5,'s'
处于right
8。"this"
的长度显然是4(不包括不存在的0终止子(。但8-5只是3。因此,使用一个+1
来包含额外的字符(通过我的计数,'t'
丢失了…(
如果该子字符串要通过指向mallocated内存的指针返回,我想这就是函数(缺少的(其余部分应该做的;它应该在mallocated内存中包含0终止符。这需要对内存的另一个字符进行mallocated;通过使用第二CCD_ 15。