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

问题描述 投票:0回答:6

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?

c++ strlen
6个回答
20
投票

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

都不是。

cstring
string
不是,它们是头文件,定义了各种函数和类的接口

C语言标准说

strlen
函数是在头文件
<string.h>
中声明的。 在 C++ 中,包含
<string.h>
strlen
放入全局命名空间,而包含
<cstring>
则将
strlen
放入
std
命名空间。

strlen函数的实际

实现
位于C标准库中(在某些平台上又称为
libc
CRT
)。 通常,它在链接时与您的可执行文件链接。

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

在您的特定编译器和工具链中,头文件

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

正确的做法是在此处也包含

<cstring>
;即使您的特定编译器不需要它,但其他编译器可能需要它。


12
投票

为了使用

strlen()
,您需要包含
<cstring>
头文件:

#include <cstring>

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


8
投票

函数

strlen()
在头文件
<string.h>
中声明。

来自 GNU C 库


0
投票

回顾一下,对于 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;
}

-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
投票
#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 库

© www.soinside.com 2019 - 2024. All rights reserved.