Я решаю некоторые задачи из книги по программированию на C, чтобы освежить в памяти строки. Я не могу понять, почему мое решение не работает.
В вопросе предлагается написать функцию с именем censor, которая изменяет строку, заменяя каждое вхождение foo на xxx.
Мой код:
int main()
{
char msg[] = "I love food, you fool.";
censor(msg);
puts(msg);
return 0;
}
void censor(char *str) {
char *c = str;
while (c+2 != '\0') {
if (*c == 'f' && *(c+1) == 'o' && *(c+2) == 'o')
*c = *(c+1) = *(c+2) = 'x';
c++;
}
}
Я обнаружил, что цикл while выполняется примерно 1700 раз. Я почти уверен, что msg[] будет автоматически включать нулевой символ в конец строки.
*(c+i)
встречается чаще, чемc[i]
, даже*c
обычно пишется какc[0]
- person pmg   schedule 21.10.2020