这个C迭代如何工作?

时间:2016-12-25 13:39:28

标签: c arrays iteration

很抱歉,如果这看起来像是一个愚蠢的问题,但是我遇到了这个将混合大小写字符串转换为小写字符串的代码,我理解它除了字符串迭代:

for (int i=0; str[i]; i++) {

    str[i] = tolower(str[i]);
}

根据我的理解,表达式str[i]表示如果 str[i]存在则继续迭代,这是正确的吗? C不检查数组的边界,这意味着循环代码会永远持续下去吗?

5 个答案:

答案 0 :(得分:1)

将警卫设为str[i]str[i] != '\0'相同,其中'\0'是字符串的空终止字符。 for循环的保护在这种情况下评估为真或假,或 0 1 。只需使用str[i]检查字符是否有效( true ),而不是空终止字符( false ),它标记字符串的结尾。

如果您是C字符串的新手,您也可以使用strlen()中的<string.h>作为后卫。此函数只返回字符串的长度。您的代码将如下所示:

for (int i=0; i < strlen(str); i++) {

    str[i] = tolower(str[i]);
}

虽然这是有效的,但使用第一种方法更容易使用,而且更像C。

答案 1 :(得分:0)

条件str[i]测试字符串的结尾。 C字符串以空值终止,因此当到达字符'\0'时,循环终止。

不,C不检查数组边界。

答案 2 :(得分:0)

它不会永远存在,因为每个字符串(char*)都必须以'\0'结尾。因此它会循环,直到str[i]不是0

答案 3 :(得分:0)

在C中每个C字符串即。你输入的常数表示为例如:

string a = {'x', 'y', 'z', 0}

代表

a = "xyz"

因此,当遇到最后一个字符时循环终止,因为最后一个元素是NULL(0),这显然是假的。

答案 4 :(得分:-2)

你对表达意思是“if(str [i])”是正确的,然后继续迭代。但是,循环不会永远继续下去,因为一旦“i”的值变得大于或等于(> =)数组“str []”的长度,条件“if(str [i])”将失败。因此,循环将只执行“str []”数组中元素数量的次数。