2011-12-06 47 views
1

我遇到了一個例子,我正在從我的C++ All-In-One For Dummies中編譯,第二版。它應該做的是顯示包含CR(somenumbers)NQ的10行代碼;但是每次運行我都會得到10個變量地址。我試圖在網絡上搜索這個問題,但它非常特別。我正在運行Linux openSUSE 12.1並使用Code :: Blocks(GCC)。我開始認爲附帶的append函數可能存在一個庫問題。無論是我還是我完全是盲目的,而且它非常明顯。C++ For Dummies練習6-14附加問題

#include <iostream> 
#include <sstream> 
#include <cstdlib> 

using namespace std; 


string *getSecertCode() 
{ 
    string *code = new string; 
    code->append("CR"); 
    int randomNumber = rand(); 
    ostringstream converter; 
    converter << randomNumber; 

     code->append(converter.str()); 
    code->append("NQ"); 

    return code; 
} 

int main() 
{ 
    string *newcode; 
    int index; 
    for (index =0; index < 10; index++) 
    { 
     newcode = getSecertCode(); 
     cout << newcode << endl; 
    } 
    return 0; 
} 
+0

除非這是一個例如在目的展示壞C++,考慮[不同的教科書(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Cubbi

+0

這不幸是一個不好的教科書的例子。它也不包括使用rand()的。儘管如此,本書的其餘部分仍然比較引人注目。但謝謝你的建議。 –

回答

1

的問題似乎是

cout << newcode << endl; 

因爲 「newcode」 是一個字符串*,而不是一個字符串。

嘗試

cout << *newcode << endl; 

代替。

正如你所說你是初學者:別忘了刪除你正在分配的內存(new!)。

+0

修好了!看起來像是我只是失明。我查看了這個代碼至少10分鐘尋找錯字。對不起,我沒有明白。所以我是新的stackoverflow。現在解決這個問題了嗎?(特別是因爲這是我的錯?) –

+0

沒問題,這些事情都發生了。不要刪除問題,如果他們有類似的問題,讓其他人有機會找到答案。 –

+0

**聲音很好** –

0

問題在於你將一個指針指向cout。

變化

cout << newcode << endl; 

cout << *newcode << endl; 

,你會看到你的價值觀。

的指針,如果你想在你要取消對它的引用 指針的值來查找在

*pointer; 

,如果你想看看該值的地址,只需要使用指針。

0

你的主要問題可能是:

cout << newcode << endl; 

你在哪裏打印指針(字符串*),而不是字符串。您可以通過取消引用變量打印字符串:

cout << *newcode << endl; 

其次,你有內存泄漏爲您的子功能分配是不會被刪除的字符串。

1

避免在任何時候使用指針。這裏你不需要它們。

string getSecertCode() 
{ 
    string code; 
    code.append("CR"); 
    [...] 

    code.append(converter.str()); 
    code.append("NQ"); 

    return code; 
} 

int main() 
{ 
    string newcode; 
    [...] 
}