2010-02-13 97 views
4
使用的strlen数组的长度

有人能解释为什么我收到的时候我使用下列G编译源此错误++编译器获得的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); 
} 

这给了我下面的错误

测试的.cpp:在函数 'INT主()':

TEST.CPP:31:错误: 'strlen的' 未在此范围

当我改变宣布#include <string>分成#include <string.h>#include<cstring>,它工作正常,我需要弄清楚使用#include<string>#include<string.h>有什么区别。非常感谢所有帮助

+2

您可以编辑问题的清晰度? “当我改变#include into #incude或#include”缺少一些信息时,我想。 –

+0

好的,完成了,thanx来展示它 – KItis

回答

7

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

  • 在C中,#include <string.h>声明strlen() et al。
  • 在C++中,你需要#include <cstring>来代替,该声明它们在std命名空间,这样你就可以调用这些函数为std::strlen()等,或者您需要using namespace std;跟进,在这种情况下,你就可以只调用它们的作为strlen()等等。
  • C++ 有一个完全独立的标头,称为<string>,它声明C++类型std::string。这个标题与strlen()无关,所以包括它在内不会让你访问strlen()

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

13

您正在尝试使用strlen函数,该函数在string.h(或作为cstring中的名称空间std的成员)中声明。因此,要使用strlen,您应该包含这两个标题中的一个。它具有绝对没有做与C标准库字符串函数头文件 -

因为string是一个完全无关的C++的#include <string>变异并不是简单的工作。是什么让你期望它会起作用?