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
,但这似乎没有帮助。
答案 0 :(得分:10)
问题是你在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',并在循环中使用它迭代器将导致它在循环的每次迭代中被调用
上述变量在循环开始时捕获一次值,并与结果进行比较,使其成为一次计算。