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

时间:2013-10-01 04:13:04

标签: c++ 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吗? STRING.H?

5 个答案:

答案 0 :(得分:17)

  

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

都不是。 cstringstring不是,它们是头文件,它们将接口定义为各种函数和类。

C语言标准表示strlen函数在头文件<string.h>中声明。在C ++中,包括<string.h>strlen放入全局命名空间,而包括<cstring>则将strlen放入std命名空间。

strlen函数的实际实现位于C标准库中(在某些平台上称为libcCRT)。通常,这在链接时与您的可执行文件链接。

  

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

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

正确的做法是在此处加入<cstring>;即使您的特定编译器没有必要,也可能需要其他编译器。

答案 1 :(得分:10)

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

#include <cstring>

这是我正在寻找的答案,但在这里没有找到直接答案。

答案 2 :(得分:7)

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

From the GNU C Library

答案 3 :(得分:-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;
}

答案 4 :(得分:-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库