我有以下方法:如何初始化數組並填充字符從緩衝區?
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
= 3t->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;
};
請加入令牌和源類型聲明! –