Я пишу программу на C. Для этой цели я использую lex. Я написал фрагмент кода на C для создания таблицы символов и управления ею. Итак, всякий раз, когда lex находит новый символ, он помещает его в таблицу символов. Проблема в том, что когда я пытаюсь распечатать все результаты из таблицы символов, я получаю результат, которого не ожидал. Если, например, входной файл был:
int main(){}
вывод должен быть:
int
main
(
)
{
}
но вывод:
int main(){}
main(){}
(){}
...
и так далее. Функция, используемая для печати, выглядит примерно так
void print_entries(struct symtab *start) {
struct symtab *s = start;
while(s != NULL) {
printf("%s\n", s->name);
s = s->next;
}
}
Вот код для добавления новых символов:
void add_entry(char* name, int type, struct symtab *start)
{
struct symtab *new;
new = malloc(sizeof(struct symtab));
last_entry(start)->next = new;
new->name = name;
new->type = type;
new->next = NULL;
}
Любые идеи?
add_entry()
называется? Вы ничего не выделили для имени здесь. - person Jeff Mercado   schedule 30.05.2011->name
полях; вам нужно выделить место для правильного количества символов (которое, похоже, вы в настоящее время не знаете вadd_entry
- это нужно будет передать), скопировать и завершить нулем. - person zwol   schedule 30.05.2011strdup(yytext)
в коде lex, который вызывает add_entry. В качестве альтернативы используйтеnew->name = strdup(name);
в add_entry - person Chris Dodd   schedule 30.05.2011yytext
не обязательно будет заканчиваться нулем. - person zwol   schedule 30.05.2011