Здесь правильнее было бы использовать
strcpy(workbuf, "all done\n");
convert("xyz");
print(workbuf);
...
convert(char *p) {
strcpy(workbuf, p);
while (*p)
...
}
Здесь правильнее было бы использовать в функции свой собс-
твенный рабочий буфер (workbuf).
Предположения об инициализации данных
-----------------------------------------------------------------
Иногда вы предполагаете, что другая функция уже установила
TDeb 3.0 #2-3 = 125 =
для вас какие-то значения:
char *workbuf;
addworkstring(char *s)
{
strcpy(workbuf, s);
}
Надежнее будет записать эту подпрограмму, добавив оператор:
if (workbuf == 0) workbuf = (char *)malloc(20);
Не забывайте об очистке
-----------------------------------------------------------------
Этот тип ошибки может привести к тому, что ваша программа
будет долго работать, но в конце-концов исчерпает динамически
распределяемую область памяти и аварийно завершит работу:
crunch_string(char *p)
{
char *word = (char*)malloc(strlen(p));
ctrcpy(work,p);
...
return(p)
}
"Забор и столбы"
-----------------------------------------------------------------
Этот тип ошибок аналогичен следующему. Сколько столбов пона-
добиться, чтобы построить 100-метровую изгородь,если столбы нужно
ставить через каждые 10 метров? Напрашивается ответ 10, но он не-
верен, так как в расчет принимается последний столб в конце забо-