我有以下方法:
int create_nodes(Source* source, int maxTokens) {
int nodeCount = 0;
Token* p_Tstart = source->tknBuffer;
Token* p_Tcurrent = source->tknBuffer;
while ((p_Tcurrent - p_Tstart) < maxTokens && p_Tcurrent != NULL) {
int szWord = p_Tcurrent->t_L;
char word[szWord];
// void *memset(void *str, int c, size_t n)
memset(word, '\0', sizeof(char)*szWord);
// void *memcpy(void *str1, const void *str2, size_t n)
char* p_T = source->buffer + p_Tcurrent->t_S;
memcpy(word, p_T, szWord);
if (word == ";") {
++p_Tcurrent;
continue;
}
++p_Tcurrent;
++nodeCount;
}
}
source
包含char*
缓冲区。该方法的目的是首先计算缓冲区中不是;
标记的所有标记(并且到达我们将需要多少个节点)。这是我正在使用的缓冲区:11 + 31;
。令牌 - 就此而言 - 创建如下:
11
+
31
;
我传入token*
,其中包含一个开头(t_S
)和一个长度(t_L
)。因此,例如,代表+
字符的标记:
t->t_S
= 3 t->t_L
= 1 在memcpy(...)
,调试器会跳转到++p_Tcurrent
,这意味着没有任何内容被复制到word
- 这实际上是一个未被捕获的异常。我在初始化单词数组时做错了什么?然后用令牌指定的特定信息填充它?
source.h
:
struct source {
const char* fileName;
char* buffer;
int bufLen;
Token* tknBuffer;
Node* nodeBuffer;
Expression* exprBuffer;
};
token.h
:
struct token {
int t_S;
int t_L;
};
答案 0 :(得分:1)
这不对。
if (word == ";") {
这将比较两个指针,并且很可能一直都是假的。
我怀疑你打算使用:
// Test whether the first character is a semicolon
if (word[0] == ';') {
或
// Test whether the entire word is a semicolon
if (strcmp(word, ";") == 0) {