在g ++编译器中使用strlen获取数组的长度

时间:2010-02-13 18:21:59

标签: 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 sizeofchar = strlen(source_language);
    printf("%d\n",sizeofchar);
}

这给了我以下错误

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

test.cpp:31:错误:'strlen'未在此范围内声明

当我将#include <string>更改为#include <string.h>#include<cstring>时,它运行正常,我需要弄清楚使用#include<string>#include<string.h>有什么区别。非常感谢任何帮助

4 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:7)

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

  • 在C中,#include <string.h>声明strlen()等人
  • 在C ++中,您需要#include <cstring>,它在std命名空间中声明它们,因此您可以将这些函数称为std::strlen()等,或者您需要跟进{ {1}},在这种情况下,您可以像往常一样将它们称为using namespace std;等。
  • C ++ 有一个名为strlen()的完全独立的标头,它声明了C ++类型<string>。此标头与std::string无关,因此包含该标头不允许您访问strlen()

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

答案 2 :(得分:4)

#include<string>

这包括c ++ std :: string,而不是c string(link:http://www.cppreference.com/wiki/string/start

和那些:

#include<cstring>

#include<string.h>

适用于c字符串(链接:http://www.cplusplus.com/reference/clibrary/cstring/

答案 3 :(得分:0)

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