以下は、lex の C コードです。以下に示す 3 つの入力文字列があります。最初の 2 つは正しく出力されます。3 番目の入力文字列の最後に、出力される 2 つの奇妙な文字があります。これはヌル文字が原因であることはわかっています。しかし、私のコードはそれを処理し、最初の 2 つの入力文字列では発生しません。
1 番目の入力文字列 : (c,a,b,ma,mb,low) 2 番目の入力文字列 : (c,a,b,ma,mb+1,low) 3 番目の入力文字列 : (c,data, istart, mid,BASE )
コードが実行されると、func_initial_var には文字列に従って「(」が含まれ、func_var には残りの文字列が含まれます。
問題は、3 番目の入力文字列のみです。3 番目の文字列の末尾に 2 つの余分な文字を追加すると、適切に出力され、割り当てられる余分なスペースが 2 つあるとします。私の質問は、なぜ 3 番目の入力文字列だけにあるのですか? なぜ最初の2つにしないのですか?助けてください。これは昨日の朝から私を悩ませています。ありがとう。
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();
}
}