很抱歉,如果这看起来像是一个愚蠢的问题,但是我遇到了这个将混合大小写字符串转换为小写字符串的代码,我理解它除了字符串迭代:
for (int i=0; str[i]; i++) {
str[i] = tolower(str[i]);
}
根据我的理解,表达式str[i]
表示如果 str[i]
存在则继续迭代,这是正确的吗? C不检查数组的边界,这意味着循环代码会永远持续下去吗?
答案 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 []”数组中元素数量的次数。