代码添加了 和1,我不知道为什么

Code adding and 1, and I don't know why

本文关键字:我不知道 为什么 添加 代码      更新时间:2023-10-16

这有点复杂,但基本上我正在编写一个程序,其中一个函数的行为有点奇怪。函数第一次输入一个字符数组

7.

现在这个函数只是打印出每个单独的"标记"(每组用空格分隔的字符)。然后打印一个空格,然后打印令牌中的字符数。但是由于某些原因,最后一个标记总是打印得很奇怪,并且会多计算1个字符。

函数如下:

int parseCommandLine(char cline[], char *tklist[]){
    int i;
    int length;
    int count = 0; //counts number of tokens
    int toklength = 0; //counts the length of each token
    length = strlen(cline);
    for (i=0; i < length; i++) {   //go to first character of each token
        if (((cline[i] != ' ' && cline[i-1]==' ') || i == 0)&& cline[i]!= '"') {
            while ((cline[i]!=' ')&& (cline[i] != '')){
                toklength++;
                cout << cline[i];
                i++;
            }
        cout << " " << toklength << "nn";
            cout << "n";
            toklength = 0;
        count ++;
        }
        if (cline[i] == '"') {
            do {
                i++;
            } while (cline[i]!='"');
            count++;
        }
    }
    //cout << count << "n";
    return 0;

下面是第一个数组的输出:

new_sensor_node 15

SN42 4

42 2

3.57 4

5.0 3

7.
 3

有什么想法可以导致这个?我怀疑这可能与我如何处理空字符

有关

很可能输入字符串实际上在末尾包含换行符。根据您读取输入的方式,它可能在输入中,也可能不在输入中。例如,fgets函数读取换行符并将其留在缓冲区中。

特别是因为您实际上没有对输入字符串进行任何实际的标记化或修改,您只是逐个字符打印,这是一个很可能的场景