Что такое код strcat strdup


Что такое код strcat strdup

strdup, strdupa, strndupa

ОБЗОР

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

Начиная с glibc 2.10: _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 До glibc 2.10: _GNU_SOURCE

strdupa(), strndupa(): _GNU_SOURCE

ОПИСАНИЕ

Функция strndup() похожа на предыдущую, но копирует не более n байт. Если s длиннее n, то копируется только n байт и добавляется конечный байт null (‘\0’).

Функции strdupa() и strndupa() подобны предыдущим, но для выделения буфера используют alloca(3). Эти функции доступны только при использовании GNU GCC и имеют ограничения, описанные в alloca(3).

Что такое код strcat strdup

Прототип описан в заголовочном файле string.h :

char* strdup (const char *src);

  • src — указатель на исходную строку.

Возвращаемое значение

Указатель на копию строки. Если выделение памяти закончилось неудачей, то создания копии не происходит и функция возращает NULL.

Пример использования

Ссылки

Wikimedia Foundation . 2010 .

Смотреть что такое «Strdup» в других словарях:

strdup — strdup нестандартная функция языка программирования Си, создающая копию указанной нуль терминированной строки в куче (используя malloc) и возвращающая указатель на неё. Чтобы освободить место, используемое созданной копией, необходимо… … Википедия

Interpreter — Ein Interpreter (im Sinne der Softwaretechnik) ist ein Computerprogramm, das einen Programm Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei umwandelt, sondern den Quellcode einliest,… … Deutsch Wikipedia

Interpreter (Computer) — Ein Interpreter (im Sinne der Softwaretechnik) ist ein Computerprogramm, das einen Programm Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei umwandelt, sondern den Quellcode einliest,… … Deutsch Wikipedia

Interpretersprache — Ein Interpreter (im Sinne der Softwaretechnik) ist ein Computerprogramm, das einen Programm Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei umwandelt, sondern den Quellcode einliest,… … Deutsch Wikipedia

Dirent.h — is the header in the C POSIX library for the C programming language that contains constructs that facilitate directory traversing. The function is not part of the C standard, but is cons >Wikipedia

Varianten der Programmiersprache C — Seit dem Erscheinen der Programmiersprache C im Jahre 1972 wurden mehrere Varianten (Spezifikationen und internationale Standards) veröffentlicht. Inhaltsverzeichnis 1 K R C 2 C89, C90 2.1 Wichtigste Neuerungen von C90 … Deutsch Wikipedia

String.h — Demande de traduction string.h → … Wikipédia en Français

String.h — Saltar a navegación, búsqueda string.h es un archivo de la Biblioteca estándar del lenguaje de programación C que contiene la definición de macros, constantes, funciones y tipos de util >Wikipedia Español

Objective-C — Класс языка: объектно ориентированный, мультипарадигмальный: рефлексивно ориентированный Появился в: 1986 Автор(ы): Бред Кокс Типизация данных: нестрогая, статическая / динамическая … Википедия

Нуль-терминированная строка — или C строка (от названия языка Си) или ASCIZ строка (от названия директивы ассемблера .asciz) способ представления строк в языках программирования, при котором вместо введения специального строкового типа используется массив символов, а концом… … Википедия

strdup() — что он делает в C? — c

Какова цель функции strdup() в C?

    5 10
  • 11 окт 2020 2020-10-11 14:55:33
  • Manoj Doubts

10 ответов

Это Simple strcpy(ptr2, ptr1) эквивалентно while(*ptr2++ = *ptr1++)

, где as: strdup эквивалентно

Итак, если вы хотите, чтобы строка, которую вы скопировали, использовалась в другой функции (поскольку она создана в разделе кучи), вы можете использовать strdup, иначе strcpy достаточно

  • 11 окт 2020 2020-10-11 14:55:35
  • Md. Al Amin Bhuiyan

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

  • 11 окт 2020 2020-10-11 14:55:35
  • dkretz

Функция strdup() является сокращением для строкового дубликата, она принимает параметр как строчную константу или строковый литерал и выделяет достаточно места для строки и записывает соответствующие символы в выделенном пространстве и, наконец, возвращает адрес от выделенного пространства к вызывающей процедуре.

  • 11 окт 2020 2020-10-11 14:55:35
  • AnkitSablok

strdup и strndup определены в POSIX-совместимых системах как:

Функция strdup() выделяет достаточную память для копии строки str , делает копию и возвращает указатель на нее.

Указатель впоследствии может быть использован как аргумент функции free .

Если доступно недостаточное количество памяти, возвращается NULL а errno — в ENOMEM .

Функция strndup() копирует не более len символов из строки str всегда нулевая, заканчивая скопированную строку.

  • 11 окт 2020 2020-10-11 14:55:35
  • Sujay Kumar

Он создает дублируемую копию строки, переданной с помощью malloc и strcpy строки, переданной в. Буфер malloced возвращается вызывающему, следовательно, необходимо запустить бесплатно по возвращаемому значению.

  • 11 окт 2020 2020-10-11 14:55:35
  • jussij

strdup() выполняет динамическое выделение памяти для массива символов, включая конечный символ 0, и возвращает адрес памяти кучи:


Итак, что он делает, это дать нам еще одну строку, идентичную строке, заданной его аргументом, без необходимости выделять память. Но нам еще нужно освободить его позже.

  • 11 окт 2020 2020-10-11 14:55:34
  • Karshit

Функция strdup() должна возвращать указатель на новую строку, которая является дубликатом строки, на которую указывает s1 . Возвращаемый указатель можно передать в free() . Возвращает нулевой указатель, если новая строка не может быть создана.

  • 11 окт 2020 2020-10-11 14:55:34
  • VonC

Нет смысла повторять другие ответы, но учтите, что strdup() может делать все, что захочет, с точки зрения C, так как не является частью какого-либо стандарта C. Однако он определяется POSIX.1-2001.

  • 11 окт 2020 2020-10-11 14:55:34
  • Chris

Возможно, код немного быстрее, чем с strcpy() , поскольку 0 char не нужно искать снова (он уже был с strlen() ).

  • 11 окт 2020 2020-10-11 14:55:34
  • Patrick Schlüter
Илон Маск рекомендует:  Как в PowerPoint наложить текст на картинку, обрезать картинку

Точно, как это звучит, предполагая, что вы привыкли к сокращенному пути, в котором C и UNIX присваивают слова, он дублирует строки :-)

Имея в виду, что это фактически не является частью стандарта ISO C (a) (это вещь POSIX), он эффективно выполняет те же действия, что и следующий код:

Он пытается выделить достаточно памяти для хранения старой строки (плюс символ » 0″, чтобы отметить конец строки).

Если распределение не удалось, оно устанавливает errno в ENOMEM и немедленно возвращает NULL . Установка errno в ENOMEM — это что-то, что malloc делает в POSIX, поэтому нам не нужно явно делать это в нашей strdup . Если вы не совместимы с POSIX, ISO C на самом деле не гарантирует существование ENOMEM поэтому я не включил здесь (b) .

В противном случае распределение работало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (на который вызывающий абонент отвечает за освобождение в какой-то момент).

Имейте в виду, что концептуальное определение. Любой архитектор библиотеки, заслуживающий своей зарплаты, может предоставить сильно оптимизированный код, предназначенный для конкретного используемого процессора.

(a) Имейте в виду, однако, что функции, начинающиеся с буквы str и строчной буквы, зарезервированы стандартом для будущих направлений. Из C11 7.1.3 Reserved identifiers :

Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подкатегоре, и * необязательно объявляет или определяет идентификаторы, перечисленные в соответствующем подпункте связанных с ним будущих библиотек. **

Будущие направления для string.h можно найти в C11 7.31.13 String handling :

Названия функций, начинающиеся с str , mem или wcs и строчной буквы, могут быть добавлены к объявлениям в заголовке .

(b) Изменение в основном будет заменено, if (d == NULL) return NULL; с:

Strdup() — что он делает в C?

Какова цель функции strdup() в C?

c function strdup

10 ответов

322 Решение paxdiablo [2008-10-31 10:31:00]

Точно, как это звучит, предполагая, что вы привыкли к сокращенному пути, в котором C и UNIX присваивают слова, он дублирует строки :-)

Имея в виду, что это фактически не является частью стандарта ISO C (a) (это вещь POSIX), он эффективно выполняет те же действия, что и следующий код:

Он пытается выделить достаточно памяти для хранения старой строки (плюс символ «\ 0», чтобы отметить конец строки).

Если распределение не удалось, оно устанавливает errno в ENOMEM и немедленно возвращает NULL . Установка errno в ENOMEM — это что-то, что malloc делает в POSIX, поэтому нам не нужно явно делать это в нашей strdup . Если вы не совместимы с POSIX, ISO C на самом деле не гарантирует существование ENOMEM поэтому я не включил здесь (b) .

В противном случае распределение работало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (на который вызывающий абонент отвечает за освобождение в какой-то момент).

Имейте в виду, что концептуальное определение. Любой архитектор библиотеки, заслуживающий своей зарплаты, может предоставить сильно оптимизированный код, предназначенный для конкретного используемого процессора.

(a) Имейте в виду, однако, что функции, начинающиеся с буквы str и строчной буквы, зарезервированы стандартом для будущих направлений. Из C11 7.1.3 Reserved identifiers :

Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подкатегоре, и * необязательно объявляет или определяет идентификаторы, перечисленные в соответствующем подпункте связанных с ним будущих библиотек. **

Будущие направления для string.h можно найти в C11 7.31.13 String handling :

Названия функций, начинающиеся с str , mem или wcs и строчной буквы, могут быть добавлены к объявлениям в заголовке .

(b) Изменение в основном будет заменено, if (d == NULL) return NULL; с:

Разбор строки, используя указатель, указывающий на строку без использования strdup и strtok функции

Я пишу код, в котором я хочу, чтобы разобрать поступающую строку (в основном это для embeddded проекта, но я хочу, чтобы проверить его первым в C) .Отель строки может быть выходом GPS, в основном в формате NMEA string.Even хотя я имел сделал разбор с помощью strdup и strtok функции, но я, stucked, когда я делаю разбор просто используя строку и указатель, указывающий на эту строку.

но Ouput это цела inputstring, а затем первые 12 characters.I выкопать это все дальше и находим, что * PTR, когда указывает на inputstring, его точки к inputstring [0] и будет копировать всю строку в нем, а затем просто скопировать первый 12 characters.How мы можем ограничить это?

Нужно help.I иметь альтернативный путь, но нужно помочь выкопать этот код шахты.

char ptr[12] : Представляет собой массив символов с размером = 12 элементов символов. размер каждого элемента в массиве = размер полукокса (1 байт).

char *ptr[12] : Это массив указателей с размером = 12 элементов указателей. размер каждого элемента в массиве = размере указателя (4 байта для 32-битных систем и 8 байт для 64-битных систем). каждый указатель в массиве может указывать на строку (массив символов).

вы должны использовать следующий код вместо

или более простой

и вы должны добавить пустую charachter в конце вашей ptr строки перед печатью ptr строки.

Таким образом , вы должны добавить 1 элемент размера ptr массива символов

strdup () — что он делает в C?

Какова цель функции strdup() в C?

10 ответов

Точно, как это звучит, если вы привыкли к сокращенному способу, которым C и UNIX назначают слова, это дублирует строки :-)

Помня, что на самом деле он не является частью самого стандарта ISO C (a) (это POSIX), он фактически делает то же, что и следующий код:

Он пытается выделить достаточно памяти для хранения старой строки (плюс символ «\ 0» для обозначения конца строки).

Если распределение не удалось, он устанавливает errno в ENOMEM и немедленно возвращает NULL . Установка errno на ENOMEM — это то, что malloc делает в POSIX, поэтому нам не нужно явно делать это в нашем strdup . Если вы не POSIX-совместимый , ISO C фактически не предписывает существование ENOMEM , поэтому я не включил это здесь (b) .

В противном случае распределение сработало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (который вызывающий ответственен за освобождение в некоторый момент).

Имейте в виду, что это концептуальное определение. Любой писатель библиотеки, достойный своей зарплаты, мог предоставить сильно оптимизированный код, предназначенный для конкретного используемого процессора.

(a) Имейте в виду, однако, что функции, начинающиеся с str и строчные буквы, зарезервированы стандартом для будущих направлений. От C11 7.1.3 Reserved identifiers :

Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в связанном с ним подпункте, и * необязательно объявляет или определяет идентификаторы, перечисленные в соответствующем подпункте будущих направлений библиотеки. **

Будущие направления для string.h можно найти в C11 7.31.13 String handling :

Имена функций, начинающиеся с str , mem или wcs и строчные буквы, могут быть добавлены в объявления в заголовке .

(b) Изменение в основном заменит if (d == NULL) return NULL; на:

Илон Маск рекомендует:  Список с русскими буквами


Возможно, код работает немного быстрее, чем с strcpy() , так как символ \0 не нужно искать снова (он уже был с strlen() ).

Нет смысла повторять другие ответы, но учтите, что strdup() может делать все, что захочет, с точки зрения C, так как он не является частью какого-либо стандарта C. Это, однако, определяется POSIX. 1-2001.

Функция strdup() должна возвращать указатель на новую строку, которая является дубликатом строки, на которую указывает s1 . Возвращенный указатель можно передать free() . Пустой указатель возвращается, если новая строка не может быть создана.

strdup () выполняет динамическое выделение памяти для массива символов, включая конечный символ ‘\ 0’, и возвращает адрес памяти кучи:

Итак, он дает нам еще одну строку, идентичную строке, заданной ее аргументом, без необходимости выделять память. Но мы все еще должны освободить это позже.

Создает дублированную копию передаваемой строки, выполняя malloc и strcpy передаваемой строки. Malloc’ed буфер возвращается вызывающей стороне, следовательно, необходимо запустить free для возвращаемого значения.

strdup и strndup определены в POSIX-совместимых системах как:

Функция strdup () выделяет достаточно памяти для копии строка str , выполняет копирование и возвращает указатель на нее.

Указатель может впоследствии использоваться в качестве аргумента функции free .

Если недостаточно памяти, возвращается NULL и errno устанавливается на ENOMEM .

Функция strndup () копирует не более len символов из строки str , всегда завершая копирование строки нулем.

Функция strdup () является сокращением для дубликата строки, она принимает параметр в качестве строковой константы или строкового литерала, выделяет достаточно места для строки и записывает соответствующие символы в выделенном пространстве и, наконец, возвращает адрес выделенного пространства для вызывающей подпрограммы.

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

Это просто strcpy(ptr2, ptr1) эквивалентно while(*ptr2++ = *ptr1++)

где как: strdup эквивалентен

Итак, если вы хотите, чтобы скопированная строка использовалась в другой функции (как она создается в разделе кучи), вы можете использовать strdup, иначе strcpy достаточно

strdup () — что он делает в C?

какова цель strdup() функция в C?

10 ответов:

именно так это звучит, предполагая, что вы привыкли к сокращенному способу, которым C и UNIX назначают слова, это дубликаты строк : -)

имея в виду, что это на самом деле не является частью самого стандарта ISO C (a) (это POSIX вещь), он эффективно делает то же самое, что и следующий код:

он пытается выделить достаточно памяти для хранения старая строка (плюс символ ‘\0 ‘ для обозначения конца строки).

если выделение не удалось, он устанавливает errno до ENOMEM и возвращает NULL немедленно. Установка errno до ENOMEM что-то malloc делает в POSIX, поэтому нам не нужно явно делать это в нашем strdup . Если ты не POSIX совместимый, ISO C фактически не требует существования ENOMEM поэтому я не включил это здесь (b) .

в противном случае распределение работало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (который вызывающий отвечает за освобождение в какой-то момент).

имейте в виду, что это концептуальное определение. Любой писатель библиотеки, стоящий их зарплаты, возможно, предоставил сильно оптимизированный код, нацеленный на конкретный используемый процессор.

(a) сохранить в однако имейте в виду, что функции начинаются с str и строчная буква зарезервированы стандартом для будущих направлений. От C11 7.1.3 Reserved identifiers :

каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подпункте, и *необязательно объявляет или определяет идентификаторы, перечисленные в его связанном будущем подпункте направления библиотеки.**

будущие направления string.h можно найти в C11 7.31.13 String handling :

имена функций, которые начинаются с str , mem или wcs и строчная буква может быть добавлена к объявлениям в .

(b) изменение в основном будет заменять if (d == NULL) return NULL; С:

_strdup, _wcsdup, _mbsdup _strdup, _wcsdup, _mbsdup

Повторяющиеся строки. Duplicates strings.

_mbsdup нельзя использовать в приложениях, выполняемых в среда выполнения Windows. _mbsdup cannot be used in applications that execute in the Windows Runtime. Дополнительные сведения см. в разделе функции CRT, которые не поддерживаются в универсальная платформа Windows приложениях. For more information, see CRT functions not supported in Universal Windows Platform apps.

Синтаксис Syntax

Параметры Parameters

стрсаурце strSource
Исходная строка, завершающаяся символом NULL. Null-terminated source string.

Возвращаемое значение Return Value

Каждая из этих функций возвращает указатель на место хранения копируемой строки или значение NULL , если не удается выделить хранилище. Each of these functions returns a pointer to the storage location for the copied string or NULL if storage cannot be allocated.

Примечания Remarks

Функция _strdup вызывает функцию malloc , чтобы выделить место для хранения копии Стрсаурце , а затем копирует стрсаурце в выделенное пространство. The _strdup function calls malloc to allocate storage space for a copy of strSource and then copies strSource to the allocated space.

_wcsdup и _mbsdup — это версии _strdupдля расширенных символов и многобайтовых символов. _wcsdup and _mbsdup are wide-character and multibyte-character versions of _strdup. Аргументы и возвращаемое значение _wcsdup являются строками расширенных символов. _mbsdup являются строками многобайтовых символов. The arguments and return value of _wcsdup are wide-character strings; those of _mbsdup are multibyte-character strings. В остальном эти три функции ведут себя идентично. These three functions behave identically otherwise.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Подпрограмма TCHAR.H TCHAR.H routine _UNICODE и _MBCS не определены _UNICODE & _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_tcsdup _tcsdup _strdup _strdup _mbsdup _mbsdup _wcsdup _wcsdup

Поскольку _strdup вызывает функцию malloc для выделения места на диске для копии стрсаурце, рекомендуется всегда освобождать эту память, вызывая бесплатную подпрограммы для указателя, возвращаемого вызовом _strdup. Because _strdup calls malloc to allocate storage space for the copy of strSource, it is good practice always to release this memory by calling the free routine on the pointer that’s returned by the call to _strdup.

Если определены _DEBUG и _CRTDBG_MAP_ALLOC , то _strdup и _wcsdup заменяются вызовами _strdup_dbg и _wcsdup_dbg для разрешения отладки выделения памяти. If _DEBUG and _CRTDBG_MAP_ALLOC are defined, _strdup and _wcsdup are replaced by calls to _strdup_dbg and _wcsdup_dbg to allow for debugging memory allocations. Для получения дополнительной информации см. _strdup_dbg, _wcsdup_dbg. For more information, see _strdup_dbg, _wcsdup_dbg.

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
_strdup _strdup
_wcsdup _wcsdup или or
_mbsdup _mbsdup

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

strdup() — что он делает в C? — c

Какова цель функции strdup() в C?

    6 10
  • 11 окт 2020 2020-10-11 14:55:33
  • Manoj Doubts

10 ответов

Это Simple strcpy(ptr2, ptr1) эквивалентно while(*ptr2++ = *ptr1++)

, где as: strdup эквивалентно

Итак, если вы хотите, чтобы строка, которую вы скопировали, использовалась в другой функции (поскольку она создана в разделе кучи), вы можете использовать strdup, иначе strcpy достаточно

  • 11 окт 2020 2020-10-11 14:55:35
  • Md. Al Amin Bhuiyan

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

  • 11 окт 2020 2020-10-11 14:55:35
  • dkretz

Функция strdup() является сокращением для строкового дубликата, она принимает параметр как строчную константу или строковый литерал и выделяет достаточно места для строки и записывает соответствующие символы в выделенном пространстве и, наконец, возвращает адрес от выделенного пространства к вызывающей процедуре.

  • 11 окт 2020 2020-10-11 14:55:35
  • AnkitSablok

strdup и strndup определены в POSIX-совместимых системах как:

Функция strdup() выделяет достаточную память для копии строки str , делает копию и возвращает указатель на нее.

Указатель впоследствии может быть использован как аргумент функции free .

Если доступно недостаточное количество памяти, возвращается NULL а errno — в ENOMEM .

Функция strndup() копирует не более len символов из строки str всегда нулевая, заканчивая скопированную строку.

  • 11 окт 2020 2020-10-11 14:55:35
  • Sujay Kumar

Он создает дублируемую копию строки, переданной с помощью malloc и strcpy строки, переданной в. Буфер malloced возвращается вызывающему, следовательно, необходимо запустить бесплатно по возвращаемому значению.

  • 11 окт 2020 2020-10-11 14:55:35
  • jussij

strdup() выполняет динамическое выделение памяти для массива символов, включая конечный символ 0, и возвращает адрес памяти кучи:

Итак, что он делает, это дать нам еще одну строку, идентичную строке, заданной его аргументом, без необходимости выделять память. Но нам еще нужно освободить его позже.

  • 11 окт 2020 2020-10-11 14:55:34
  • Karshit

Функция strdup() должна возвращать указатель на новую строку, которая является дубликатом строки, на которую указывает s1 . Возвращаемый указатель можно передать в free() . Возвращает нулевой указатель, если новая строка не может быть создана.

  • 11 окт 2020 2020-10-11 14:55:34
  • VonC

Нет смысла повторять другие ответы, но учтите, что strdup() может делать все, что захочет, с точки зрения C, так как не является частью какого-либо стандарта C. Однако он определяется POSIX.1-2001.

  • 11 окт 2020 2020-10-11 14:55:34
  • Chris

Возможно, код немного быстрее, чем с strcpy() , поскольку 0 char не нужно искать снова (он уже был с strlen() ).

  • 11 окт 2020 2020-10-11 14:55:34
  • Patrick Schlüter

Точно, как это звучит, предполагая, что вы привыкли к сокращенному пути, в котором C и UNIX присваивают слова, он дублирует строки :-)

Имея в виду, что это фактически не является частью стандарта ISO C (a) (это вещь POSIX), он эффективно выполняет те же действия, что и следующий код:

Он пытается выделить достаточно памяти для хранения старой строки (плюс символ » 0″, чтобы отметить конец строки).

Если распределение не удалось, оно устанавливает errno в ENOMEM и немедленно возвращает NULL . Установка errno в ENOMEM — это что-то, что malloc делает в POSIX, поэтому нам не нужно явно делать это в нашей strdup . Если вы не совместимы с POSIX, ISO C на самом деле не гарантирует существование ENOMEM поэтому я не включил здесь (b) .

В противном случае распределение работало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (на который вызывающий абонент отвечает за освобождение в какой-то момент).

Имейте в виду, что концептуальное определение. Любой архитектор библиотеки, заслуживающий своей зарплаты, может предоставить сильно оптимизированный код, предназначенный для конкретного используемого процессора.

(a) Имейте в виду, однако, что функции, начинающиеся с буквы str и строчной буквы, зарезервированы стандартом для будущих направлений. Из C11 7.1.3 Reserved identifiers :

Каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подкатегоре, и * необязательно объявляет или определяет идентификаторы, перечисленные в соответствующем подпункте связанных с ним будущих библиотек. **

Будущие направления для string.h можно найти в C11 7.31.13 String handling :

Названия функций, начинающиеся с str , mem или wcs и строчной буквы, могут быть добавлены к объявлениям в заголовке .

(b) Изменение в основном будет заменено, if (d == NULL) return NULL; с:

strdup () — что он делает в C?

какова цель strdup() функция в C?

10 ответов:

именно так это звучит, предполагая, что вы привыкли к сокращенному способу, которым C и UNIX назначают слова, это дубликаты строк : -)

имея в виду, что это на самом деле не является частью самого стандарта ISO C (a) (это POSIX вещь), он эффективно делает то же самое, что и следующий код:

он пытается выделить достаточно памяти для хранения старая строка (плюс символ ‘\0 ‘ для обозначения конца строки).

если выделение не удалось, он устанавливает errno до ENOMEM и возвращает NULL немедленно. Установка errno до ENOMEM что-то malloc делает в POSIX, поэтому нам не нужно явно делать это в нашем strdup . Если ты не POSIX совместимый, ISO C фактически не требует существования ENOMEM поэтому я не включил это здесь (b) .

в противном случае распределение работало, поэтому мы копируем старую строку в новую строку и возвращаем новый адрес (который вызывающий отвечает за освобождение в какой-то момент).

имейте в виду, что это концептуальное определение. Любой писатель библиотеки, стоящий их зарплаты, возможно, предоставил сильно оптимизированный код, нацеленный на конкретный используемый процессор.

(a) сохранить в однако имейте в виду, что функции начинаются с str и строчная буква зарезервированы стандартом для будущих направлений. От C11 7.1.3 Reserved identifiers :

каждый заголовок объявляет или определяет все идентификаторы, перечисленные в его связанном подпункте, и *необязательно объявляет или определяет идентификаторы, перечисленные в его связанном будущем подпункте направления библиотеки.**

будущие направления string.h можно найти в C11 7.31.13 String handling :

имена функций, которые начинаются с str , mem или wcs и строчная буква может быть добавлена к объявлениям в .

(b) изменение в основном будет заменять if (d == NULL) return NULL; С:

Илон Маск рекомендует:  FindNext - Функция Delphi
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL