strlen()的另一个问题

use*_*782 -1 c strlen

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从到intsize_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',并在循环迭代器中使用它将导致它在循环的每次迭代中被调用.

上述变量在循环开始时捕获一次值,并与结果进行比较,使其成为一次计算.