gpt4 book ai didi

c - 全局变量未在 Lexer 函数中读取

转载 作者:行者123 更新时间:2023-11-30 16:19:50 25 4
gpt4 key购买 nike

正在使用编译器,我想打印出符号表。我有一个节点结构,我需要访问全局变量“lineCount”。当我尝试在 idPush 函数中打印它时,出现段错误。我的目标是将节点放置在数组中或链接在一起,然后打印表格。

我尝试在代码中的其他地方打印它,但出现了错误。我运行了一个要包含的文本文件,它非常短,只是为了确保它正常工作。

%option noyywrap
%{

#include <stdio.h> /* needed for printf() */
#define YY_DECL int yylex()
#define STRINGMAX 25
struct Node* nodes[100];
int lineCount = 0;


struct Node
{
int data;
char type[STRINGMAX];
char wordv[STRINGMAX];

struct Node *next;
};
void idPush(const char *new_data, char *typel){
// Allocate memory for node
struct Node* new_node = malloc(sizeof(struct Node));
strncpy(new_node->wordv, new_data, STRINGMAX-1);
new_node->wordv[STRINGMAX-1] = '\0';
strncpy(new_node->type, typel, STRINGMAX);

printf("allocated new node space\n");


printf(lineCount);
nodes[lineCount] = new_node;

if(lineCount > 0){
cleanNodes(nodes);
}
getData(new_node);

}

lineCount 的输出应该为零,因为它是代码的第一遍,但我得到了段错误。

最佳答案

这是不正确的:

printf(lineCount);

printf 的第一个参数是一个格式字符串,用于描述要打印的内容。由于您传递给函数的类型不是它所期望的类型,因此您调用 undefined behavior在这种情况下会导致崩溃。

如果要打印整数,请使用 %d 格式说明符。

printf("%d\n", lineCount);

关于c - 全局变量未在 Lexer 函数中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55481990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com