这个使用数组括号的循环与 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
}
在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
}