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?
strlen()属于哪个库?它属于cstring吗?还是字符串?
都不是。
cstring
和string
不是库,它们是头文件,定义了各种函数和类的接口。
C语言标准说
strlen
函数是在头文件<string.h>
中声明的。 在 C++ 中,包含 <string.h>
将 strlen
放入全局命名空间,而包含 <cstring>
则将 strlen
放入 std
命名空间。
strlen
函数的实际
实现位于C标准库中(在某些平台上又称为
libc
或CRT
)。 通常,它在链接时与您的可执行文件链接。
为什么它可以在不包含库字符串或 cstring 的情况下工作?
在您的特定编译器和工具链中,头文件
<iostream>
恰好包含<cstring>
,这意味着包含前者的任何代码也可以免费获得后者。 这是一个实现细节,不应该依赖它——如果您使用另一个编译器编译代码,您可能会突然发现自己陷入了编译器错误的海洋中。
正确的做法是在此处也包含
<cstring>
;即使您的特定编译器不需要它,但其他编译器可能需要它。
为了使用
strlen()
,您需要包含<cstring>
头文件:
#include <cstring>
这就是我一直在寻找的答案,但我在这里没有找到直接的答案。
回顾一下,对于 C++11,将编译以下 2 个程序:
#include <iostream>
#include <cstring> // provides std::strlen()
int main()
{
const char* cStyleString = "CStyleString";
std::cout << std::strlen(cStyleString) << std::endl;
return 0;
}
还有
#include <iostream>
#include <string.h> // provides global strlen()
int main()
{
const char* cStyleString = "CStyleString";
std::cout << strlen(cStyleString) << std::endl;
return 0;
}
#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;
}
#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 库