C++ 使用g+中的strlen获取数组的长度+;编译程序

C++ 使用g+中的strlen获取数组的长度+;编译程序,c++,string,cstring,strlen,C++,String,Cstring,Strlen,有人能解释一下为什么我在使用下面的g++编译器编译源代码时会出现这个错误吗 #include <cstdio> #include <string> using namespace std; int main() { char source_language[50]; scanf("%16s\n",source_language); int length = sizeof(source_language); int sizeofch

有人能解释一下为什么我在使用下面的g++编译器编译源代码时会出现这个错误吗

#include <cstdio>
#include <string>

using namespace std;

int main()
{
    char source_language[50];


    scanf("%16s\n",source_language);

    int length = sizeof(source_language);
    int sizeofchar = strlen(source_language);
    printf("%d\n",sizeofchar);
}
#包括
#包括
使用名称空间std;
int main()
{
字符源_语言[50];
scanf(“%16s\n”,源语言);
int length=sizeof(源语言);
int sizeofchar=strlen(源语言);
printf(“%d\n”,sizeofchar);
}
这给了我以下的错误

test.cpp:在函数“int main()”中:

test.cpp:31:错误:未在此作用域中声明“strlen”

当我将
#include
更改为
#include
#include
时,效果很好,我需要使用
#include
#include
找出区别。非常感谢您的帮助

#包括
#include<string>

这包括C++ + STD::string,而不是C字符串(link:)/p> 以及:

#include<cstring>
#包括

#包括

用于c字符串(链接:)

您试图使用
strlen
函数,该函数在
string.h
中声明(或者,作为
cstring
中命名空间
std
的成员)。因此,为了使用strlen,您应该包括这两个标题中的一个


#include
变体不起作用,因为
string
是一个完全不相关的特定于C++的头文件,它与C标准库字符串函数完全无关。是什么让你期望它能工作?

C++程序员通常必须处理至少两种风格的字符串:原始C风格的字符串,通常声明为
char*str
字符str[123]
,可使用
strlen()
等进行操作。;和C++风格的字符串,其类型为
std::string
,并通过
string::length()
等成员函数进行操作。不幸的是,这导致了一点混乱

  • 在C语言中,include声明了strlen()等
  • 在C++中,你需要<代码>包含“< /代码>”,这就把它们声明在<代码> STD< /Calp>命名空间中,因此你可以把这些函数称为<代码> STD::STRUNLY()/<代码>等,或者你需要使用命名空间STD来跟踪<代码>;code>,在这种情况下,您可以像往常一样将它们称为
    strlen()
  • C++还具有一个完全分开的标题,称为“代码> <代码>,它声明C++类型<代码> STD::String 。此标题与
    strlen()
    无关,因此包含它将不允许您访问
    strlen()

我不知道为什么Mehrdad Afshari删除了他的答案,我在这里重复了一遍。

使用string.length()而不是strlen()

为了清楚起见,你能编辑这个问题吗?“当我改变时,包含到包含或包含”是缺少一些信息,我想。好了,完成了,谢谢你展示它
#include<string.h>