int main(void)
{
int i;
for (i = 0; i < strlen("word"); i++ );
{
printf("_");
printf(" ");
}
return 0;
}
strlen() 似乎又出现问题了。在这种情况下,for 循环应该打印 "_ _ _ _ "
因为单词中有四个字母。我猜这与 strlen()
返回 size_t
值有关。如何解决这个问题?我尝试将 i
从 int
更改为 size_t
但这似乎没有帮助。
最佳答案
问题是 for 后面有一个分号。因此,您的代码调用 strlen()
四次。
for (i = 0; i < strlen("word"); i++ ) --> ; <--
然后它独立于循环调用 printf 两次。
int main()
{
size_t i, len = strlen("word");
for (i = 0; i < len; ++i) {
printf("_ ");
}
return 0;
}
“strlen”并不便宜 - 它必须手动计算提供给它的字符串中的字符,直到-'\0',并且在循环迭代器中使用它将导致循环的每次迭代都调用它.
上述变体在循环开始时捕获一次值,并与结果进行比较,使其成为一次性计算。
关于c - strlen() 的另一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789503/