每当遇到空格时,C - Loop似乎减半

use*_*702 0 c loops

我正在制作一个程序来解析一行中的单词,当一个单词遇到一个非字母数字字符时,它会向树中添加一个单词.一行中没有空格,一切都很顺利.但是,当存在非字母数字字符时,有问题的循环(从代码中注释的行开始)的大小减半!

为什么循环减半?

Tree addin (char* filee, Tree tree)
{
    int i;
    FILE *fp;
    fp = fopen(filee, "r");
    char* hold2 = malloc(99);
    int count=-1;
    char* hold;
    while ((hold=getLine(fp))!=NULL)
    {
        count=-1;
        for (i=0; i<strlen(hold); i++) //The loop in question
        {
            count++;
            if ((isalnum(hold[count])==0)&&(hold[count]!='\n'))
            {
                strncpy(hold2, hold, count);
                hold2[count]='\0';
                hold=strdup(&hold[count+1]);
                count=-1;
                tree = insertT(tree, hold2);
            }
        }
        tree = insertT(tree, hold);
    }
    free(hold);
    fclose(fp);
    return tree;
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 5

当您找到非字母数字字符时,程序将移动hold到指向字符串的其余部分,但不会重置i.这意味着你继续从新hold指针迭代,这个指针在原始指针的中途,加上i那时发生的事情.这样做可能至少会跳过一堆字符,并且可能会让你开始对字符串之外的内存进行操作,这绝对是坏消息.