線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3273
推到 Plurk!
推到 Facebook!

structure中使用string問題

答題得分者是:zhgwbzhd
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-30 01:42:06 IP:76.245.xxx.xxx 訂閱
我在C++ Primer Plus 5/e中看到以下內容:
結構可以使用string類別成員嗎?
原則上可行,但是取決於編譯程式,如BCB 5.5與VC 7.1以前的版本不支援使用string類別成員之結構的初始。

我是使用CodeGear 2007的Conscol Application ( Source Type: C ,只勾選Conscol App)

[code cpp]
//---------------------------------------------------------------------------
#include
#include
#pragma hdrstop
using namespace std;

#pragma argsused
//---------------------------------------------------------------------------
struct inflatable_ch
{
char name[20];
float volume;
double price;
};

struct inflatable_str
{
string name_str;
float volume_str;
double price_str;
};

struct inflatable_str_init
{
string name_str_init;
float volume_str_init;
double price_str_init;
};
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
inflatable_ch guest_ch[5]=
{
{"Amy", 0.5, 21.99},
{"Bob", 1.8, 30.14}
};
cout<<"結構成員宣告使用char並做初始化\n";
for(int i=0;i<5;i )
cout<<"guest_ch["< guest_ch[i].name<<"\t"< cout<<"\n";

cout<<"結構成員宣告使用string\n";
inflatable_str guest_str[1];
guest_str[0].name_str="Peter";
guest_str[0].volume_str=20.11;
guest_str[0].price_str=100.98;
cout<<"guest_str_init[0]: "<<
guest_str[0].name_str<<"\t"< cout<<"\n";

cout<<"結構成員宣告使用string並做初始化\n";
inflatable_str_init guest_str_init[5]=
{
{"Alice", 10, 21.99},
{"Brian", 1, 30.14}
};
for(int i=0;i<5;i )
cout<<"guest_str_init["< guest_str_init[i].name_str_init<<"\t"<
system("PAUSE");
return 0;
}
//---------------------------------------------------------------------------

[/code]

以下是執行結果
結構成員宣告使用string
guest_str_init[0]: Peter 20.11 100.98

執行結果中,如果使用string類別宣告struct的成員(guest_str_init),在cout會有問題,但是卻是float及double的值有問題,如果是直接指定(guest_str)則是正確的。
請問,這是因為CodeGear2007不支援這樣的宣告及初始化嗎?還是我哪邊有寫錯?但是照書本的寫法,CodeGear2007應該是支援這樣的使用方式才對。

煩請解答我的問題,謝謝。


我使用Dev-C 4.9.9.2的結果如下
結構成員宣告使用string
guest_str_init[0]: Peter 20.11 100.98

結構成員宣告使用string並做初始化
guest_str_init[0]: Alice 10 21.99 ---->正確
guest_str_init[1]: Brian 1 30.14 ---->正確
guest_str_init[2]: -7.91346e-039 -3.52284e-062 ---->為何不是0
guest_str_init[3]: -1.#QNAN 4.24814e-314 ---->為何不是0
guest_str_init[4]: 2.93874e-039 1.67672e-307 ---->為何不是0
請按任意鍵繼續 . . .

string在struct中的初始化值會有這麼大的影響嗎?為什麼其他的變數不會有這種問題?



編輯記錄
GGL 重新編輯於 2009-06-06 03:33:19, 註解 無‧
zhgwbzhd
一般會員


發表:10
回覆:32
積分:18
註冊:2008-07-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-06-11 10:14:40 IP:221.218.xxx.xxx 未訂閱
在structure中還是不要使用string吧。最好用char數組。
因為string是一個類,他的長度不好處理,有些編譯器可能會根據string的最大長度來申請內存,有些可能會動態來申請,不管怎樣,處理的好的,不會齣錯,不過影響性能是肯定的。
如果處理的不好,應該就會齣錯的。
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-12 04:48:09 IP:76.245.xxx.xxx 訂閱
謝謝您的指導,看來這種寫法應該要避免,免得在不同的compiler會出現不同的結果


===================引 用 zhgwbzhd 文 章===================
在structure中還是不要使用string吧。最好用char數組。
因為string是一個類,他的長度不好處理,有些編譯器可能會根據string的最大長度來申請內存,有些可能會動態來申請,不管怎樣,處理的好的,不會齣錯,不過影響性能是肯定的。
如果處理的不好,應該就會齣錯的。
系統時間:2024-11-23 5:12:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!