20

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

5 回答 5

19

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

两者都不。 cstring并且string不是,它们是定义各种函数和类的接口的头文件。

C 语言标准说strlen函数在头文件中声明<string.h>。在 C++ 中,将<string.h>地点strlen包含在全局命名空间中,而<cstring>将地点strlen包含在std命名空间中。

该函数的实际实现在 C 标准库中(又名或在某些平台上)。通常,这是在链接时与您的可执行文件链接的。strlenlibcCRT

为什么它在不包括库字符串或 cstring 的情况下工作?

在您的特定编译器和工具链中,头文件恰好<iostream>包含<cstring>在其中,这意味着包含前者的任何代码也可以免费获得后者。这是一个实现细节,不应该依赖——如果你用另一个编译器编译你的代码,你可能会突然发现自己陷入了编译器错误的海洋。

正确的做法是也包括<cstring>在这里;即使您的特定编译器不需要它,但其他编译器可能需要它。

于 2013-10-01T04:38:38.373 回答
12

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

#include <cstring>

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

于 2016-03-09T14:04:40.907 回答
7

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

来自 GNU C 库

于 2013-10-01T04:13:46.930 回答
-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;
}
于 2015-11-02T17:24:51.073 回答
-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 库

于 2013-10-01T04:21:08.850 回答