2012-08-22 61 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; 
} 

它不使用雖然多維向量。