哪个C++头文件声明了strlen?

use*_*494 17 c++ strlen

哪个库strlen()属于哪个?

它属于cstring吗?还是string

我尝试了以下代码,它确实有效:

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

int main() {
    char * str="abc";
    cout<<strlen(str);
}
Run Code Online (Sandbox Code Playgroud)

我设置str等于3并给出正确答案3.

为什么它不包括库字符串或cstring?

我应该在那里包含cstring或string吗?STRING.H?

Ada*_*eld 18

strlen()属于哪个库?它属于cstring吗?还是字符串?

都不是. cstringstring,它们被头文件,其定义了接口的各种函数和类.

C语言标准说该strlen函数在头文件中声明<string.h>.在C++中,包括<string.h>地方strlen到全局命名空间,包括同时<cstring>代替地方strlenstd命名空间.

实际执行中的strlen功能是在C标准库(又名libcCRT在某些平台上).通常,这在链接时与您的可执行文件链接.

为什么它不包括库字符串或cstring?

在您的特定编译器和工具链中,只有头文件<iostream>包含<cstring>在其中,这意味着包含前者的任何代码也可以免费获得后者.这是一个实现细节,不应该依赖 - 如果您使用其他编译器编译代码,您可能会突然发现自己处于编译器错误的大海中.

正确的做法是也包括<cstring>在这里; 即使您的特定编译器没有必要,也可能需要其他编译器.


MBI*_*MBI 10

要使用strlen(),您需要包含cstring头文件.

#include <cstring>
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的答案,但在这里找不到直接的答案.


sla*_*8cu 7

函数strlen()在头文件string.h中声明

来自GNU C库