strlen()的另一个问题

时间:2013-12-26 18:37:14

标签: c strlen

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,但这似乎没有帮助。

1 个答案:

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

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