[問題]關於結構中的字元陣列初始化

看板C_and_CPP作者 (ppttcc)時間15年前 (2010/10/25 17:37), 編輯推噓3(309)
留言12則, 5人參與, 最新討論串1/1
比較兩種字元陣列的初始化 1.char cstring[10]="string..";//宣告直寫在main()同時初始化.沒什麼問題. 2.struct carray{char cstring[10];}arr;//將字元陣列宣告於結構中 arr.cstring="string..";//這行有問題, 編譯器顯示錯誤訊息: incompatible types in assignment of const char[4] to char[10] 但我想或許應為個別元素設定值,所以 arr.cstring[2]='r';//這樣就沒問題了 同樣,若1.寫成一行宣告cstring,另一行初始化 cstring="string..";//同樣會產生一樣的錯誤訊息 為什麼會這樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.10.138

10/25 17:41, , 1F
解決方式之一:使用 strcpy
10/25 17:41, 1F
但還是蠻想了解根本的原因... ※ 編輯: ppttcc 來自: 114.38.10.138 (10/25 17:45)

10/25 17:48, , 2F
根本原因就是定義的時候直接賦值, 編譯器會產生類似
10/25 17:48, 2F

10/25 17:49, , 3F
strcpy的程式碼, 這樣的型態稱為 Aggregate, 也可以在
10/25 17:49, 3F

10/25 17:49, , 4F
定義的時候直接賦值 : http://ppt.cc/ymRH
10/25 17:49, 4F

10/25 17:50, , 5F
你要在定義完才assign新值, 一樣還是要用strcpy
10/25 17:50, 5F

10/25 17:56, , 6F
上面打錯, 定義的時候不是稱為賦值, 應該叫做初始化,
10/25 17:56, 6F

10/25 17:56, , 7F
跟 assign 是不一樣的東西
10/25 17:56, 7F

10/25 18:51, , 8F
strcpy 解決吧..如你所說,是宣告初始化..
10/25 18:51, 8F

10/25 18:52, , 9F
之後是 assign, 非初始化,
10/25 18:52, 9F

10/25 19:00, , 10F
看起來C++的字串結構非常難懂
10/25 19:00, 10F

10/25 21:04, , 11F
喔喔 樓上跳針了
10/25 21:04, 11F

10/25 21:10, , 12F
= ="
10/25 21:10, 12F
文章代碼(AID): #1CnK_n9w (C_and_CPP)