条件跳转或移动取决于未初始化的strcat值

条件跳转或移动取决于未初始化的strcat值,c,racket,tokenize,C,Racket,Tokenize,我知道发生这个valgrind错误是因为我试图使用未初始化的东西。 下面的代码是导致此错误的代码。它所做的是尝试读取球拍代码并获取每个符号,例如+或define。(标记化) 我不希望您完全理解代码,因为还有很多其他代码需要理解它在做什么。 但是,如果您能告诉我您对我在该行中出现此错误的原因的想法,我将不胜感激,symbol=strcat(symbol,newsymbol) 由于symbol未被num终止,您需要num在将其传递给strcat()之前终止它,因为symbol未被num终止,您需要n

我知道发生这个valgrind错误是因为我试图使用未初始化的东西。 下面的代码是导致此错误的代码。它所做的是尝试读取球拍代码并获取每个符号,例如+或define。(标记化) 我不希望您完全理解代码,因为还有很多其他代码需要理解它在做什么。 但是,如果您能告诉我您对我在该行中出现此错误的原因的想法,我将不胜感激,
symbol=strcat(symbol,newsymbol)


由于
symbol
未被
num
终止,您需要
num
在将其传递给
strcat()
之前终止它,因为
symbol
未被
num
终止,您需要
num
在将其传递给
strcat()
之前终止它执行该行时包含?执行该行时“symbol”包含什么?@HAruMOmo当有人回答您的帖子时,请使用绿色勾号接受最佳答案,而不是删除帖子。@HAruMOmo也:虽然我的C可能有点生锈,但如果读取的符号恰好超过29个字符,这不会爆炸吗?例如,
当前延续的调用是30个字符,并且AFAIK Racket没有限制。@GregHendershott您是正确的。最糟糕的是,OP的代码不计算它在
symbol
中附加了多少字符。如果遇到长符号,它将写入未分配的内存。我不想看到如果所说的符号以外壳代码结尾会发生什么。@HAruMOmo当有人回答你的帖子时,请用绿色的勾号来接受最好的答案,而不是删除帖子。@HAruMOmo还说:虽然我的C可能有点生锈,但如果读到的符号恰好超过29个字符,这不会爆炸吗?例如,
当前延续的调用是30个字符,并且AFAIK Racket没有限制。@GregHendershott您是正确的。最糟糕的是,OP的代码不计算它在
symbol
中附加了多少字符。如果遇到长符号,它将写入未分配的内存。我不想看到如果所说的符号以外壳代码结尾会发生什么。
char* newsymbol = talloc(sizeof(char)*2);
                *newsymbol = charRead;
                newsymbol[1] = '\0';
                symbol = strcat(symbol, newsymbol);