【问题标题】:How is the while-loop iterating?while循环如何迭代?
【发布时间】:2021-09-06 04:31:21
【问题描述】:
char *removeSpaces(char *str)
{
    int i = 0, j = 0;
    while (str[i])
    {
        if (str[i] != ' ')
           str[j++] = str[i];
        i++;
    }
    str[j] = '\0';
    return str;
}

我在其中一篇文章中读到了 while(n) 等于 while(n!=0),但是在这种情况下发生了什么,只是想知道 while(str[i]) 是如何进行的?

【问题讨论】:

    标签: c++ string while-loop


    【解决方案1】:

    str[i] 求值为空字符\0 时,while 循环终止。该字符的值为0。发生这种情况时,循环将终止。这不是一个好的设计,因为循环可能会继续迭代超出字符串的长度(这是不安全的,因为它会读取不属于字符串的内存,可能会导致分段错误。)

    【讨论】:

    • 为什么循环会继续迭代超出字符串的长度?根据定义,C 字符串由 \0 终止
    • 如果它是一个字符串文字,你是对的。但是,不能保证调用者提供了有效的 C 字符串。
    • 那么,正确的语法是什么... while(str[i] != '\0');或 while(str[i] !=0); ?
    • 它们或多或少是等价的。我更喜欢while(str[i] != '\0'),因为它最清晰。
    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2015-03-23
    相关资源
    最近更新 更多