Прошло много времени с тех пор, как я посмотрел на C (все еще учусь), и я только вернулся к книге K & R.
Я только что приступил к Упражнению 5-3 (p107).
Напишите версию указателя функции strcat, которую мы показали в главе 2: strcat (s, t) копирует строку t в конец s.
Я придумал этот ...
void strcat(char *s, char *t);
void strcat(char *s, char *t) {
while (*s++ != '\0');
s--;
while (*t != '\0') {
*s++ = *t++;
}
*--t = '\0';
}
int main() {
char str[] = "Hey, hello";
char str2[] = " are you?";
strcat(str, str2);
printf("%s\n", str);
return 0;
}
Кажется, это работает.
Что мне интересно, так это то, что книга K & R часто пишет упражнения скак можно меньше строчек - я бы ожидал, если бы они предоставили свой собственный пример кода выше, вы получите такие вещи, как this ...
void strcat(char *s, char *t) {
while (*s++ != '\0');
s--;
while ((*s++ = *t++) != '\0');
*--t = '\0';
}
Для меня этоменее читабельный (возможно, этот пример не так хорош, но я часто смотрю на их код и думаю , если бы он был разбит на несколько строк, я бы понял его гораздо лучше ).Представленные в книге примеры, по-видимому, пропагандируют такого рода присваивания в условной части цикла и фактически содержат столько кода, сколько возможно на строку.
Является ли книга правильной, пытаясь сделать как можно большегде вы можете, даже если читаемость страдает?
Это просто Путь C ?