Какой файл заголовка С++ объявляет 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?

Ответы

Ответ 1

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

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

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

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

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

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

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

Ответ 3

Чтобы использовать strlen(), вам нужно включить заголовочный файл cstring.

#include <cstring>

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

Ответ 4

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char *pointer1="Idle hands are the devil workshop.";

    int length;
    length=strlen(pointer1);

    char *pointer2;
    pointer2=new char(length+1);

    strcpy(pointer2,pointer1);

    cout<<"pointer 2:"<<pointer2;
    delete[] pointer2;

    return 0;
}

Ответ 5

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *string = "Hello World";
    printf("%lu\n", (unsigned long)strlen(string));
    return 0;
}

Эта программа напечатает значение 11, которое является длиной строки "Hello World". Символьные строки хранятся в массиве типа данных с именем char. Конец строки найден путем поиска первого нулевого символа в массиве.

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