【问题标题】:which C++ header file declares strlen?哪个 C++ 头文件声明了 strlen?
【发布时间】:2013-10-07 02:53:37
【问题描述】:

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?

【问题讨论】:

  • 这个问题似乎离题了,因为官方文档已经回答了这个问题。
  • @ImranOmer 这看起来不像 PHP。相反,它看起来像 C++。
  • @JanDvorak:如果在官方文档中得到回答,这似乎是一个主题问题。为什么文档会跑题?
  • 如果“由文档回答”不是关闭问题的正当理由,那么我将改用“缺乏最低限度的理解”作为官方原因。
  • @JanDvorak 许多关于 SO 的“好”问题(通过投票来衡量)可以通过粗略阅读相关规范来回答;为什么要挑出这个?

标签: c++ strlen


【解决方案1】:

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

两者都没有。 cstringstring 不是,它们是头文件,它们定义了各种函数和类的接口

C 语言标准规定strlen 函数在头文件&lt;string.h&gt; 中声明。在 C++ 中,包含 &lt;string.h&gt;strlen 放入全局命名空间,而包含 &lt;cstring&gt; 则将 strlen 放入 std 命名空间。

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

为什么不包含库字符串或 cstring 就可以工作?

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

正确的做法是在此处也包含&lt;cstring&gt;;即使您的特定编译器不需要它,但其他编译器可能需要它。

【讨论】:

  • 不是“又名libc”;这就是 Unix 主义。
【解决方案2】:

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

#include <cstring>

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

【讨论】:

    【解决方案3】:

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

    From the GNU C Library

    【讨论】:

    • C++ 中没有核心函数。
    • 我提到了在 string.h 上声明的
    • 我一时对php核心函数strlen()感到困惑,但后来看到的代码是C代码
    • 一些string 库包含在您已包含的&lt;iostream&gt; 中。
    • @user2756494 iostream 是否包含 string.h,也许?
    【解决方案4】:
    #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;
    }
    

    【讨论】:

      【解决方案5】:
      #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 库

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多