2012-08-22 36 views
2

这是我第一次问一个关于Stackoverflow的问题。C++使用类输出从多维向量的字符数组

当我使用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(); 
} 
+0

+1为一个完整的程序。请参阅http://sscce.org/。 –

回答

1

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

其他说明:

  • 变化void main()int main()是一个C++符合规范的程序。
  • 我没有看到一个#include <cstring>strtok
+0

非常感谢您的帮助。 – tsuz

+0

@ user1615594:请阅读[如何接受答案?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

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; 
} 

它不使用虽然多维向量。