首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

字符型数组的读取,该怎么解决

2013-10-11 
字符型数组的读取本帖最后由 cde32 于 2013-10-10 14:55:31 编辑#include iostreamusing namespace std

字符型数组的读取
本帖最后由 cde32 于 2013-10-10 14:55:31 编辑

#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}

我想知道“char name[255]”的每个元素是什么,比如name[0],该怎样读出来?
[解决办法]
cout <<"Name:"<<a.getName( )[0];
cout <<"Name:"<<b.getName( )[0];
[解决办法]
int i;
for(i=0;i<255;i++)
{
  cout <<"name[i]:"<<name[i];
}
不知道楼主是不是想说这个?
引用:
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}

我想知道“char name[255]”的每个元素是什么,比如name[0],该怎样读出来?


[解决办法]
你申明了两个对象,直接调用name[0]显示未定义,必须指明包含name数组的类,类被初始化后才会出现类中的成员。

a.name[0]或者a::name[0]
[解决办法]
引用:
Quote: 引用:

int i;
for(i=0;i<255;i++)
{
  cout <<"name[i]:"<<name[i];
}
不知道楼主是不是想说这个?
Quote: 引用:

#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}

我想知道“char name[255]”的每个元素是什么,比如name[0],该怎样读出来?


对!可这样读不出来!直接用name[0]都不行,更不要说循环了。你实际试一下就知道了。
另外,我包含了algorithm后,用“copy(name,20,ostream_iterator<char>(cout));”也读不出来!
是不是类里的数组不能直接这么读取啊?
该怎样做?


呵呵;实现一个一个输出很容易;但是我也遇到问题了,也有疑问;
你把 class A中的  char name[255] 定义为全局变量即可,但是问题同时出现;我在看看;
 同等大神解答:
  我的问题是   既然class B继承了 class A;为什么声明的 char name【255】  在main中cout <<"name[0]:"<<name[0];   name[0]为未定义?
   可能我把以前学的又忘了把?
  坐等解答
[解决办法]
引用:
你申明了两个对象,直接调用name[0]显示未定义,必须指明包含name数组的类,类被初始化后才会出现类中的成员。

a.name[0]或者a::name[0]


你好,能解答下我的问题吗?
7楼的问题~!
[解决办法]

B b("Hello!");
char* name = b.getName();
for(int i =0;i < 255; ++i)
{
  std::cout << name[i];
}

[解决办法]

#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(const char * n){


strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
}





引用:

#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(const char * n){
strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
}


Quote: 引用:

#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}

我想知道“char name[255]”的每个元素是什么,比如name[0],该怎样读出来?

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

你申明了两个对象,直接调用name[0]显示未定义,必须指明包含name数组的类,类被初始化后才会出现类中的成员。

a.name[0]或者a::name[0]


你好,能解答下我的问题吗?
7楼的问题~!

我改成了char name[6];然后定义两个6位的字符串没有越界——是不是我们理解错了?两组字符串没有一起存储到char name[6];里面,而是a、b两个不同的指针分别指向char name[6];?在这里可以把char name[6];当成是一个变量看待?


看10L 妥妥的,给你找了个人来了  

字符型数组的读取,该怎么解决
 记得给人家分。。
  当然,另外几层楼的神仙也记得给分

 字符型数组的读取,该怎么解决

跟你学习了。
[解决办法]
字符型数组的读取,该怎么解决

。。。。我想到了 图灵狗 大哥的 那个,可是。。我怎么没去尝试下呢字符型数组的读取,该怎么解决
[解决办法]


[解决办法]
越界会覆盖其它地方,结果难料,深究下去没有意义。

引用:
Quote: 引用:


#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
};
class B:public A{
public:
B(const char * n){
strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
}

我改成了char name[6];然后定义两个6位的字符串没有越界?两组字符串没有一起存储到char name[6];里面,而是a、b两个不同的指针分别指向char name[6];?在这里可以把char name[6];当成是一个变量看待?
就是说,根本不能直接读出char name[6]有什么?

[解决办法]
引用:
Quote: 引用:

public 成员,char name[255]; public 继承
下面都没有问题
cout <<"name[0]:"a.<<name[0];
cout <<"name[0]:"<<b.name[0];
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{  return name; }
void print_any(int n)
{
  assert( n>=0 && n<255);
  if(n>=0 && n<255)
     cout<<"name["<<n<<"]= "<<name[n]<<",Hex = "<<hex <<(int)name[n]<<endl;
}
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
for(int i=0;i<255)
   a.print_any(i);
for(int i=0;i<255)
   b.print_any(i);
}
retrurn 0;
}

类的成员,在类的非静态方法内,可以不用成员语法,和域名语法
直接使用名字.

其他地方,要用成员语法,和域名语法。

非静态成员,一般用成员语法,
   对象和引用访问,使用 .  ;
   a.name[0];
   r.name[0];
   指针,使用 。->
   p-> name[0];
   成员指针,成员函数指针  .*,->*
  
静态成员,一般用域名语法  
  A::x;
静态成员,也可以用成员语法访问,不过会被编译器,直接替换成域名语法,用类名来访问。

类的成员访问,受到访问权限的控制,无权访问的作用域,不能访问。

运行你的代码出现7处错误,不行啊!


 加入#include <assert.h> 
  代码是没有问题的;实测可行,但是结果是 十六进制显示;自己改;可能这位大哥是 做底层开发的。


赞一个!
[解决办法]

引用:
Quote: 引用:

越界会覆盖其它地方,结果难料,深究下去没有意义。

我确定没有越界!上午我发帖问过越界问题。改成char name[4]就越界出错了!是指针问题!


嗯,有点看不懂楼主想表达什么?
  越界?
   你 char name[255] 定义了255个元素,
   但是你copy到 name数组中的字符如果是5个,你输出 name[6] 当然是显示空;我记得如果没有赋予元素可能就默认为0把?不知道是哪本书上提的。忘了
     因为初始化定义没有赋予任何元素?
    我觉得取决于编译器吧。
    等待楼主找到结果

热点排行