下面是 lex 中的 C 代码。我有三个输入字符串,如下所示。前两个打印正确。在第三个输入字符串的末尾,有两个奇怪的字符被打印出来。我知道这是因为空字符。但是我的代码会处理它,而且我的前两个输入字符串不会发生这种情况。
第一个输入字符串:(c,a,b,ma,mb,low) 第二个输入字符串:(c,a,b,ma,mb+1,low) 第三个输入字符串:(c,data, istart, mid,BASE )
执行代码时,func_initial_var 将根据字符串包含“(”,而 func_var 将包含字符串的其余部分。
问题仅在于第三个输入字符串。假设如果我在第三个字符串的末尾添加两个额外的字符,它会正确打印,我猜有两个额外的空间被分配。我的问题是为什么只在第三个输入字符串中?为什么不在前两个?请帮忙。从昨天早上开始,这一直困扰着我。谢谢。
char *func_var = "";
char *func_initial_var = "";
<SOME_STATE>. { char c;
func_initial_var = strdup(yytext);
c = input();
func_var = (char*) malloc(sizeof(char));
for(q=0;;q++) {
if(c == ')')
{
func_var[q] = c;
printf("%s\n",func_var);
BEGIN SOME_STATE_X;
break;
}
func_var[q] = c;
printf("%s\n",func_var);
temp_func = (char*) realloc(func_var,(q+2)*sizeof(char));
if(temp_func != NULL)
{
func_var = temp_func;
} else {
free(func_var);
printf("Error allocating memory\n");
return 1;
}
c = input();
}
}