将 Char 从 lex 保存到 C 中的 Char 数组

Saving Char from lex to array of Char in C

我将 c 文件中的字符保存在此数组中

 char *idTable[100];

在 while 循环中,

if(ntoken == 1){
      idTable[numId] = yytext;
      printf(" \nVariable %s", idTable[numId]);
      printf(" Found\n");
      numId++;
    }

然后遍历数组。变量 yytext 应该只有标识符和变量,例如 int i, int j, int cont

当我在循环中打印这些字符时,它会显示我想要保存的变量。但是当我迭代数组时,它会将所有文本从变量带到底部:

while(i<numId){
    printf("%d", i );
    printf("%s", idTable[i]);
    i++;
  } 

所以,

printf(" \nVariable %s", idTable[numId]);
      printf(" Found\n"); 

将打印像 Variable i Found 这样的字符,但是 printf("%s", idTable[i]); 将始终打印我想查看的文件中的文本。像这样:

i;
  int j;
  char c;
  char cadena;
  float z;
  int 89aa12;
  z=14.9e-8;
  z= 3454y45hrthtrh;
  z== 3454y45hrthtrh;
  z= 3454y45hrthtrh;
  z=12.9;
  cadena="Hola";
  scanf ("%d",i);
  i=i*2;
  printf ("El doble es %d",i);
  Y="Cualquier Cosa 1";
  u=z+y

您在 idTable 的每个元素中保存了一个指向相同内存的指针,因此无论内存设置为 last 是每个元素将指向的内容。

您需要为每个要保存的字符串分配额外的内存(或使用 std::string)。

strdup可以为所欲为。

idTable[numId] = strdup(yytext);

但不要忘记在用完后释放内存。