c - strlen() 的另一个问题

标签 c strlen

int main(void)
{
    int i;
    for (i = 0; i < strlen("word"); i++ );
    {
        printf("_");
        printf(" ");
    }
return 0;
}

strlen() 似乎又出现问题了。在这种情况下,for 循环应该打印 "_ _ _ _ " 因为单词中有四个字母。我猜这与 strlen() 返回 size_t 值有关。如何解决这个问题?我尝试将 iint 更改为 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/

相关文章:

c - 从指针中减去得到长度

c - 如何用C语言实现IIR滤波器?

c - 尝试初始化结构数组数组时在 ‘{’ 标记之前的预期表达式

php - 设置帖子的最小字符长度

c++ - 如何 strcpy 并返回复制的字符数?

php - 限制包含 HTML 标签的文本的输入长度

c - 128 位类型错误

c - 多维数组的超出范围声明

assembly - mips 组件的字符串长度

c++ - 从 size_t 转换为 DWORD,可能丢失数据