C ++使用类从多维向量输出char数组

时间:2012-08-22 00:30:44

标签: c++ stl stdvector

这是我第一次在Stackoverflow上提问。

当我使用char数组和类时,我无法获得一个多维向量来输出数据。

以下代码输出意外字符,如“「」及”[B“,虽然我希望它打印”234987 NAME MESSAGE1?1030“。

任何人都可以帮助我吗?感谢。

#include <iostream>
#include <vector>

using namespace std;

class test{
public:
  test();
  void output();
private:
  std::vector< std::vector<char*>>  Message_detail;
};

test::test(){
  int i = 0;
  int j = 0;
  char input[] ="USERID=234987+USERNAME=NAME+MESSAGE=MESSAGE1?+TIME=1030&USERID=12304234+USERNAME=NAME2UKI+MESSAGE=HIII+TIME=1330&USERID=1376321+USERNAME=JONES12+MESSAGE=GENKI DAYO+TIME=1025";
  char * pch;
  pch = strtok (input,"+=&");
  Message_detail.push_back( vector<char*>() );
  while (pch != NULL)
  {
    if((int)Message_detail[j].size() == 4){
      Message_detail.push_back( vector<char*>() );
      j++;
    }
    if(strlen(pch) < 1){
      Message_detail.pop_back();
    }
    if(i % 2 != 0){
      Message_detail[j].push_back(pch);
    }
    i++;
    pch = strtok (NULL, "+=&");
  } 
}

void test::output(){
  for(vector<char*>::size_type i = 0; i < Message_detail.size(); i++){
    for(vector<char*>::size_type j = 0; j < Message_detail[i].size();    j++){  
      std::cout << Message_detail[i][j] << endl;
    }
  }
}

void main(){
  test hello;
  hello.output();
}

2 个答案:

答案 0 :(得分:1)

char input[]是一个局部变量,这意味着它会在构造函数末尾的}到期。向量中的所有指针都指向此局部变量的位置。如果您将代码更改为static char input[]或使用全局数组等,则代码应该正常工作,因为您现在已确保该数组在程序的生命周期内存在。

其他说明:

  • void main()更改为int main(),使其成为符合C ++标准的程序。
  • 我没有看到#include <cstring>strtok

答案 1 :(得分:0)

以下输出:

  

NAME MESSAGE1? 1030 12304234 NAME2UKI HIII 1330 1376321 JONES12 GENKI   DAYO 1025

正在使用以下程序生成:

#include <cstdio>
#include <cstring>

int main ()
{
    char * pch;
    char input[] ="USERID=234987+USERNAME=NAME+MESSAGE=MESSAGE1?+TIME=1030&USERID=12304234+USERNAME=NAME2UKI+MESSAGE=HIII+TIME=1330&USERID=1376321+USERNAME=JONES12+MESSAGE=GENKI DAYO+TIME=1025";
    pch = strtok (input,"U");
    while (pch != NULL)
    {
        pch = strtok (NULL, "=");      
        if ( pch == NULL ) break;
        pch = strtok (NULL, "+&");      
        printf ("%s\n",pch);
    }
    getchar();
    return 0;
}

虽然它不使用多维向量。