下面是 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();
}
}
最佳答案
您可以尝试分配更多内存,例如:
func_var = (char*) malloc(sizeof(char)* strlen(func_initial_var));
在您的代码中,您分配了 4 个字节(字符大小)
关于c - 字符串正在打印奇怪的字符 - lex 中的 c 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885244/