这个使用数组括号的循环与 C 中的指针表示法有什么区别?

What is the difference between this loop using array bracket vs pointer notation in C?

在C语言中,我有如下代码:

void rm_newline(char input[])
{
    assert(input);
    size_t i;
    for(i = 0; input[i] != '[=10=]'; ++i)
    {
        if(input[i] == '\n') input[i] = '[=10=]';
    }
    return;
}

此代码通过将“\n”字符替换为“\0”来按预期工作。但是我有一个以前的版本如下所示:

void rm_newline(char input[])
{
    assert(input);
    char *input_ptr = input;
    while(*input_ptr != '[=11=]')
    {
        if(*input_ptr++ == '\n')
        {
            *input_ptr = '[=11=]';
        }
    }
    return;
}

第二个代码没有正确地将“\n”替换为“\0”,但我不确定原因。有人能解释一下第二个代码与第一个代码在功能上有何不同吗?

第二种情况,

 if(*input_ptr++ == '\n')

input_ptr 在条件语句执行之前递增。你需要在替换完成后增加,比如

while(*input_ptr != '[=11=]')
{
    if(*input_ptr == '\n')
    {
        *input_ptr = '[=11=]';  
    }
     input_ptr++; // do the increment here
}