c ++在类外部分配char数组的索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++在类外部分配char数组的索引相关的知识,希望对你有一定的参考价值。

试图弄清楚为什么我的char数组在一个类或结构中不接受所有字符,就像通常不在类或结构中那样。

#include <iostream>
using namespace std;

const int SIZE = 10;
struct A{
  char address[SIZE];
}

int main(){
  char address_from_main[SIZE];
  A a;

  address_from_main[2] = 9;
  cout<<"address from main: "<<address_from_main[2]<<endl;

  a.address[2] = 9;
  a.address[3] = 'a';
  cout<<"show 2: "<<a.address[2]<<" , but didnt show"<<endl;
  cout<<"show 3: "<<a.address[3]<<" , this one did"<<endl;

输出=来自main的地址:9 nshow 2 :,但是没有显示 show:,这个确实如此

这怎么可能?有人知道如何解决这个问题吗?

非常感谢。

答案

在你的第一个例子中,正如你所说,这是正常工作,但这是不可能的,因为你声明的数组是一个char array,你将numeric值存储为int value

address[2] = 9;//assigning a int value not a character
cout<<address[2]<<endl;// hence will not print 9 but some junk value

address[2] = '9';//Correct, assigning a numeric character
cout<<address[2]<<endl;// Will print 9

另请阅读有关整数和字符的内存分配,并了解两者的字节分配有何区别。

另一答案

猜猜有一个未签名的char就可以了。最终。

#include <iostream>
#include <fstream>
using namespace std;


struct Frame {
  unsigned char total_frame[16];
  int length_frame = 5;
  int checksum;
  bool checksum_good = 1;
  bool complete = 1;
};



int main(){
  Frame total;
  // open a file in read mode.
  ifstream infile;
  infile.open("input-file.txt");
  cout << "Reading from the file" << endl;

  //reading from the file
  for(int i=0; i<16; ++i){
    cin>>total.total_frame[i];
  }
  cout<<"read"<<endl;

  //reading out from the buffer to the screen
  for(int i=0; i<16; ++i){
    cout<<total.total_frame[i]<<endl;
  }
  return 0;
}

以上是关于c ++在类外部分配char数组的索引的主要内容,如果未能解决你的问题,请参考以下文章

java 枚举数组的问题

对删除分配给结构数组的动态内存感到困惑

c ++:使用模板在类中定义可变长度数组

String数组的定义和赋值

C#struct最佳实践,可能存在矛盾吗?

静态数组仅在类定义内溢出堆栈(段错误 11),否则不会......?