与C中的字符数组混淆

时间:2014-10-30 01:30:08

标签: c arrays string loops pointers

有人可以建议为什么主要循环在第五次迭代后永远不会完成     它的目标是将字符数组减少到1个最终元素?我已经明白了     远和我完全消耗,因为它们应该是11次迭代,如调用返回

size_t strlen( char const *str )
{
    int length = 0;
    while (*str++ !='\0')
    {
        length += 1;
    }
    return length;
}


void abracadabra( char *word )
{
    int i, c;
    int len = strlen(word)-1;
    for (i = 0; i <= len; i++)
    {
        putchar(*word);
        putchar(' ');
        *(word++);

    }
}


int main()
{
    char word[250];
    int i, j;

    printf ("enter your word:\n");
    scanf ("%[^\n]s", &word);

    for (i = 0; i <= strlen(word)-1; i++)
    {
        abracadabra(word);
        putchar('\0');
        printf("\n");
        for (j = 0; j <= i; j++)
        {
            putchar('\0'); 
        }
        word[strlen(word) - 1] = '\0'; 
    }
    word[strlen(word)-1] = '\0'; 
    printf("\n");
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:0)

i and strlen循环中使用变量for是错误的。 i不断增加,字长也在减少。所以在中间,由于i&gt; strlen(word)

,循环终止
int main()
{
    char word[250];
    int i, j;

    printf ("enter your word:\n");
    scanf ("%[^\n]s", &word);

   // for (i = 0; i <= strlen(word)-1; i++)
   while ( strlen(word) )
    {
        abracadabra(word);
        putchar('\0');
        printf("\n");           
        word[strlen(word) - 1] = '\0'; 
    }

    word[strlen(word)-1] = '\0'; 
    printf("\n");
    system("pause");
    return 0;
}

答案 1 :(得分:0)

每次在main中执行外部for循环时,字符串的大小减1.计数器i每次也增加1。这会导致您运行循环的一半时间。

int size = strlen(word);
for (i = 0; i < size; i++) {
    \\same inner code
}

为main中的外部for循环子代上面的代码解决了这个问题。