Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印出数组';s成员错误_C++_Arrays_String_Printing - Fatal编程技术网

C++ 打印出数组';s成员错误

C++ 打印出数组';s成员错误,c++,arrays,string,printing,C++,Arrays,String,Printing,我在打印出我的结构的一个成员时遇到了一点问题。这就是我到目前为止所做的: struct Code { char letter; string sequence; } void createCode(HuffmanNode *root, string codestr, Code *codeBook, int count) { if(root->getRight() == NULL && root->getLeft() == NULL) { Co

我在打印出我的结构的一个成员时遇到了一点问题。这就是我到目前为止所做的:

struct Code
{
  char letter;
  string sequence;
}

void createCode(HuffmanNode *root, string codestr, Code *codeBook, int count)
{
  if(root->getRight() == NULL && root->getLeft() == NULL)
  {
    Code code;
    code.letter = root->getLetter();
    code.sequence = codestr;
    codeBook[count] = code;
    count++;
  }
  else
  {
    createCode(root->getLeft(), codestr + "1", codeBook, count);
    createCode(root->getRight(), codestr + "0", codeBook, count);
  }
}
这一切都很好,但主要是当我试图在Codebook中打印出代码数组中的成员序列时:

string codestr;
count = 0;
Code codeBook[256];
createCode(root, string codestr, codeBook, count); //root is already created 
for(int i = 256; i >= 0; i--)
{
  if(isalpha(codeBook[i].letter))
  cout << codeBook[i].sequence << " ";
}
stringcodestr;
计数=0;
码本[256];
createCode(根、字符串codestr、码本、计数)//根目录已创建
对于(int i=256;i>=0;i--)
{
if(isalpha(代码本[i].字母))

cout当您
createCode
时,
count
不是递增的,因为您是按值传递的,请更改为按引用传递:

void createCode(HuffmanNode *root, string codestr, Code *codeBook, int& count)
数组代码本包含256个元素,但索引范围为0到255。for循环应为:

for(int i = 255; i >= 0; i--)

否则,对边界外数组元素的访问是未定义的行为。

主要问题是
createCode()
总是被传递
count=0
。因此,您将所有
code
条目存储在数组的第0个位置,最后一个条目覆盖以前的所有条目

若要修复,请通过引用或指针传递
count
,或使函数返回
count
的新值


最后,
循环的
的起始值超出范围(以1为界)。

感谢您捕捉到这一点!我刚刚修复了它,但它仍然没有正确打印出来……还有其他提示吗?当我调用createCode()时,您应该通过引用将计数传递给createCode在我的if语句中count是递增的,不是吗?@user200081:不是真的。你在第一个分支中递增它,在第二个分支中递归调用createCreate()。你从来不会同时做这两件事。啊,这很有帮助。谢谢!我明白我现在做错了什么。我需要通过引用传递。。。