какой заголовочный файл C ++ объявляет strlen?

К какой библиотеке принадлежит strlen()?

Это принадлежит cstring? или string?

Я попробовал следующий код, и он работает:

include <iostream>
using namespace std;
//withou include<string.h>

int main() {
    char * str="abc";
    cout<<strlen(str);
}

Я установил str равным 3 и дал правильный ответ 3.

Почему он работает без включения строки библиотеки или cstring?

Стоит ли включать туда строку cstring или строку? string.h?

17
задан 14.04.2020, 12:21

2 ответа

К какой библиотеке принадлежит strlen ()? Это относится к cstring? или строка?

Ни то, ни другое. cstring и string не являются библиотеками , они являются заголовочными файлами , которые определяют интерфейс для различных функций и классов.

Стандарт языка Си говорит, что функция strlen объявлена ​​в заголовочном файле <string.h>. В C ++ включение <string.h> помещает strlen в глобальное пространство имен, в то время как включение <cstring> вместо этого помещает strlen в пространство имен std.

Фактическая реализация функции функции strlen находится в стандартной библиотеке C (также известной как libc или CRT на некоторых платформах). Обычно это связано с вашим исполняемым файлом во время ссылки.

Почему он работает без включения строки библиотеки или cstring?

В вашем конкретном компиляторе и инструментарии, так получилось, что заголовочный файл <iostream> включает в себя <cstring>, Это означает, что любой код, который включает первый, также получает последний бесплатно. Это деталь реализации , на которую нельзя полагаться - если вы скомпилируете свой код с другим компилятором, вы можете внезапно оказаться в море ошибок компилятора.

Надо также включить сюда <cstring>; даже если это не требуется для вашего конкретного компилятора, это может быть необходимо для других компиляторов.

18
ответ дан 14.04.2020, 12:22

Функция strlen () объявлена ​​в заголовочном файле string.h

Из библиотеки GNU C

7
ответ дан 14.04.2020, 12:24
  • 1
    эта привычка помогает Вам, если Вы хотите получить внутреннее название хоста – phoet 02.10.2019, 06:25
  • 2
    There' s никакая такая вещь как базовая функция в C++. – John Dvorak 14.04.2020, 12:24
  • 3
    Я упомянул, что это объявляется на string.h – slash28cu 14.04.2020, 12:24
  • 4
    Я был смущен на мгновение с php базовой функцией strlen (), но тогда посмотрите код, который является кодом C – slash28cu 14.04.2020, 12:25
  • 5
    но почему делает работу кода без " включайте < строка h> "? – user2756494 14.04.2020, 12:25
  • 6
    Часть из string библиотека включена в <iostream>, который you' ve включен. – nhgrif 14.04.2020, 12:26

Теги

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