【问题标题】:Messing with Character Arrays in C在 C 中处理字符数组
【发布时间】:2014-10-30 01:30:07
【问题描述】:

有人能告诉我为什么主循环在第五次迭代后死掉了 将字符数组减少到 1 个最终元素的预期目标是什么?我得到了这个 far 并且完全被消耗,因为它们应该是调用返回的 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;
}

【问题讨论】:

  • 除了接受的答案中的内容外,还有其他错误;你在strlen(word) - 1 做的几个地方当strlen(word) 为0 时会失败; putchar('\0') 是一个错误。 '\0' 是不可打印的字符,它在内部用于标记字符串的结尾,但您不应该尝试将其写入流

标签: c arrays string loops pointers


【解决方案1】:

每次在 main 中执行外部 for 循环时,字符串的大小都会减少 1。计数器 i 也每次都增加 1。这会使您运行循环的次数达到预期的一半。

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

将上述代码替换为 main 中的外部 for 循环可以解决问题。

【讨论】:

  • 实际上这段代码更准确地反映了分配的内容。一种单词三角形。真的不能感谢所有人。
【解决方案2】:

for 循环中使用变量i and strlen 是错误的。 i 一直在增加,字长在减少。所以在中间,循环由于 i>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;
}

【讨论】:

  • 非常感谢您的意见。虽然循环肯定简化了代码,这总是好的。我是个菜鸟,所以我倾向于使我的功能过于复杂。非常感谢
猜你喜欢
  • 2010-11-14
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2020-03-11
  • 1970-01-01
相关资源
最近更新 更多