理解索引数组有困难 void addChar(){ 如果(lexLen
理解索引数组有困难 void addChar(){ 如果(lexLen,c,C,lexeme是char的数组,或者是指向char数组中第一个char的指针 lexLen是数组中当前的字符数,位于标记正在生成的字符串结尾的空字符之前 在lexeme[lexLen++]=nextChar;中: lexeme[lexLen](暂时忽略++)是数组中当前包含标记结尾的空字符的元素 lexeme[lexLen]=nextChar;将该元素更改为包含nextChar中的值。因此,它将nextChar中的此字符置于数组中字符串的末尾 ++在其值用于上述操作后,会增加lexLen le
lexeme
是char
的数组,或者是指向char
数组中第一个char
的指针
lexLen
是数组中当前的字符数,位于标记正在生成的字符串结尾的空字符之前
在lexeme[lexLen++]=nextChar;
中:
(暂时忽略lexeme[lexLen]
)是数组中当前包含标记结尾的空字符的元素++
将该元素更改为包含lexeme[lexLen]=nextChar;
中的值。因此,它将nextChar
中的此字符置于数组中字符串的末尾nextChar
在其值用于上述操作后,会增加++
lexLen
lexeme[lexLen]=0;
在加长字符串结尾后的位置放置一个空字符,以标记其新的结尾。在原始字符串后添加nextChar,然后在结尾添加'\0',这是一个C风格的字符串
同时,如果字符串长度超过98,则打印错误消息Lexeme是一个字符数组。在范围检查中,我将假设它有100个字符长,并且已经分配了内存。您的代码没有显示这一点 lexLen是一个数字。它似乎指向字符串的末尾。因此,如果Lexeme当前包含“hello”,则lexLen将为5
void addChar() {
if (lexLen <= 98) {
lexeme[lexLen++] = nextChar;
lexeme[lexLen] = 0;
} else {
printf("Error - lexeme is too long \n");
}
}
这一行有两个功能。它说“lexeme中位置5处的字符应该设置为nextchar。它还增加lexLen(++),因此lexLen现在是6
lexeme[lexLen++] = nextChar;
这表示“lexeme中位置6处的字符应设置为0”。这是因为C中的字符串应以null结尾。(0==null)。null标记字符串的结尾。下次调用AddChar()时,它将被覆盖。
lexLen++
是后缀增量,因此在lexeme数组中的较高索引上设置0
lexeme[lexLen] = 0;