int main(void)
{
int i;
for (i = 0; i < strlen("word"); i++ );
{
printf("_");
printf(" ");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我似乎再次遇到strlen()的问题."_ _ _ _ "在这种情况下,for循环应该打印,因为单词中有四个字母.我猜它是strlen()返回一个size_t值.如何解决这个问题?我试图改变i从到int到size_t,但似乎并没有帮助.
kfs*_*one 10
问题是你在for之后有一个分号.所以你的代码调用了strlen()四次.
for (i = 0; i < strlen("word"); i++ ) --> ; <--
Run Code Online (Sandbox Code Playgroud)
然后它独立于循环调用printf两次.
int main()
{
size_t i, len = strlen("word");
for (i = 0; i < len; ++i) {
printf("_ ");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
"strlen"并不便宜 - 它必须手工计算字符串中的字符 - 直到 - '\ 0',并在循环迭代器中使用它将导致它在循环的每次迭代中被调用.
上述变量在循环开始时捕获一次值,并与结果进行比较,使其成为一次计算.