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

zzwlnbp8  于 2023-02-01  发布在  其他
关注(0)|答案(5)|浏览(346)

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?

s2j5cfk0

s2j5cfk01#

strlen()属于哪个库?它属于cstring?还是string?
. cstringstring都不是 * 库 *,它们是 * 头文件 *,定义了各种函数和类的 * 接口 *。
C语言标准规定strlen函数在头文件<string.h>中声明。在C++中,包含<string.h>会将strlen放入全局命名空间,而包含<cstring>会将strlen放入std命名空间。
strlen函数的实际 * 实现 * 在C标准库中(在某些平台上也称为libcCRT)。通常,它在链接时与可执行文件链接。
为什么它不包含库字符串或cstring?
在你的编译器和工具链中,头文件<iostream>碰巧包含了<cstring>,这意味着任何包含前者的代码也可以免费获得后者。这是一个实现细节,不应该依赖它--如果你用另一个编译器编译代码,你可能会突然发现自己陷入了编译器错误的海洋。
正确的做法是在这里也包含<cstring>;即使您的特定编译器不需要,但其他编译器可能需要。

brgchamk

brgchamk2#

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

#include <cstring>

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

kzipqqlq

kzipqqlq3#

函数strlen()在头文件<string.h>中声明。
GNU C Library

7gs2gvoe

7gs2gvoe4#

#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;
}
jobtbby3

jobtbby35#

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

相关问题