Хрестоматия по программированию на Си в Unix


Массивы, строки, указатели. Хрестоматия по программированию на Си в Unix - стр. 11


В Си невозможны функции, возвращающие массив:

proc() array of ... а только proc() ref array of ...

Само название типа (например, для использования в операции приведения типа) получается вычеркиванием имени переменной (а также можно опустить размер массива):

g = ( int *(*(*(*)())[])() ) 0;

Напишите функцию strcat(d,s), приписывающую строку s к концу строки d.

Ответ:

char *strcat(d,s) register char *d, *s; { while( *d ) d++; /* ищем конец строки d */ while( *d++ = *s++ ); /* strcpy(d, s) */ return (d-1); /* конец строки */ }

Цикл, помеченный "strcpy" - это наиболее краткая запись операторов

do{ char c; c = (*d = *s); s++; d++; } while(c != '\0');

На самом деле strcat должен по стандарту возвращать свой первый аргумент, как и функция strcpy:

char *strcat(d,s) register char *d, *s; { char *p = d; while( *d ) d++; strcpy(d, s); return p; }

Эти два варианта демонстрируют, что функция может быть реализована разными способами. Кроме того видно, что вместо стандартной библиотечной функции мы можем определить свою одноименную функцию, несколько отличающуюся поведением от стандартной (как возвращаемое значение в 1-ом варианте).

© Copyright А. Богатырев, 1992-95
Си в UNIX

| |




- Начало -  - Назад -  - Вперед -