Воссоздание strstr ()

Назначение значения домена для первичного ключа - это практика, которая идет в путь, вплоть до того времени, когда программисты Cobol и динозавры шли по земле вместе. Практика сохранилась по сей день чаще всего в устаревших системах инвентаризации. Это главным образом способ устранения одного или нескольких столбцов данных и вложения данных из исключенного столбца (ов) в значение PK.

Если вы хотите хранить клиента и поставщика в одной таблице, просто сделайте это и используйте autoincrementing integer PK и добавьте столбец CallType или что-то подобное, которое может содержать значения «S» и «C» или что-то еще. Вам не нужен составной первичный ключ.

Вы всегда можете объединить эти столбцы (PK и ContactType) в отчетах, например. C12345, S20000 (приведение целых чисел в строку), если вы хотите исключить столбец для экономии места (т. Е. На печатной или отображаемой странице), и все в вашей организации понимают соглашение о том, что первый символ идентификатора объекта стоит для кода ContactType.

Этот подход будет использовать возможности автоинкремента, встроенные в механизм базы данных, упростить ваш ПК и связанный с ним код на уровне данных и сделать вашу программу и базу данных более надежными.

0
задан chqrlie 6 March 2019 в 16:15
поделиться

1 ответ

Функция нарушается несколькими способами.

Вот исправленная версия:

int myStrStr(const char *haystack, const char *needle, char *buffer) {
    if (*needle == '\0') {
        /* special case for empty needle: return success with an empty match */
        buffer[0] = '\0';
        return 1;
    }
    for (; *haystack != '\0'; haystack++) {
        if (*haystack == *needle) {
            buffer[0] = *haystack;
            for (size_t i = 1;; i++) {
                buffer[i] = needle[i];
                if (needle[i] == '\0')
                    return 1;
                if (needle[i] != haystack[i])
                    break;
            }
        }
    }
    buffer[0] = '\0';
    return 0;
}

Обратите внимание, что копирование совпавшей строки во время сканирования не является необходимым, было бы достаточно скопировать иглу, когда совпадение найдено. На самом деле, содержание buffer представляет собой либо пустую строку, либо копию needle: не очень полезный побочный эффект.

0
ответ дан chqrlie 6 March 2019 в 16:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: