while循环如何迭代?

Posted

技术标签:

【中文标题】while循环如何迭代?【英文标题】:How is the while-loop iterating? 【发布时间】: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]) 是如何进行的?

【问题讨论】:

【参考方案1】:

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

【讨论】:

为什么循环会继续迭代超出字符串的长度?根据定义,C 字符串由 \0 终止 如果它是一个字符串文字,你是对的。但是,不能保证调用者提供了有效的 C 字符串。 那么,正确的语法是什么... while(str[i] != '\0');或 while(str[i] !=0); ? 它们或多或少是等价的。我更喜欢while(str[i] != '\0'),因为它最清晰。

以上是关于while循环如何迭代?的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何在Java Swing中的while循环迭代后等待

我的 do while 循环在一次迭代后停止。我该如何继续下去?

如何使用重复、while 循环或其他迭代技术编写一个根据某些规则返回输入向量索引的函数

while do while以及穷举和迭代

Python入门教程第57篇 循环进阶之模拟do…while语句

穹举,迭代,while循环。