2013-10-01 3 views
15

В какой библиотеке strlen() принадлежит?, который заголовочный файл C++ объявляет 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?

+4

Этот вопрос не соответствует теме, поскольку на него уже ответила официальная документация. –

+0

Его функция PHP. –

+2

@ImranOmer это не похоже на PHP. Скорее, это похоже на C++. –

ответ

7

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

From the GNU C Library

+0

В C++ нет такой функции, как основная функция. –

+0

Я упомянул, что объявлен на string.h – slash28cu

+0

Я был смущен на мгновение с помощью функции php core strlen(), но затем вижу код, который является кодом C – slash28cu

-3
#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

+0

Это не то, что задает вопрос ... –

15

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

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

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

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

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

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

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

+0

Не "aka' libc' "; это унисекс. –

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

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

    int length; 
    length=strlen(pointer1); 

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

    strcpy(pointer2,pointer1); 

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

    return 0; 
} 
7

Для использования strlen() вам необходимо включить заголовочный файл cstring.

#include <cstring> 

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

Смежные вопросы