理解索引数组有困难 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;