Какой файл заголовка С++ объявляет 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>
здесь; даже если это не обязательно для вашего конкретного компилятора, это может потребоваться с другими компиляторами.
Ответ 2
Функция strlen() объявляется в файле заголовка string.h
Из библиотеки GNU C
Ответ 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