将 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);
但不要忘记在用完后释放内存。
我将 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);
但不要忘记在用完后释放内存。