Re: [問題] 結構中的成員設定字串

看板C_and_CPP (C/C++)作者 (老貓)時間16年前 (2010/01/23 22:38), 編輯推噓4(408)
留言12則, 4人參與, 最新討論串2/2 (看更多)
其實你的 stu.name = "Tony"; 這句已經不是初始化, 變數的初始值的給予是在宣告的同時就配給的。 用你的例子來舉例: struct data { char name[10]; int math; } stu = {"tony", 80}; 這樣的語法才是變數的初始化。 ※ 引述《thnestar (峰)》之銘言: : 遇到的問題: (題意請描述清楚) : 例如我有個結構為 : struct data : { : char name[10]; : int math; : }stu; : 我想要將名字賦予初值,我使用 : strcpy(stu.name,"Tony"); : 是正確的,但是為何我不能使用像是 : stu.name="Tony"; 呢? : 如果這樣的話會導致編譯錯誤。 : 然後我發現,如果不要用設定(=)而是用等於(==)則可以順利編譯, : 但是印出來的結果卻不是我想要的字串(Tony)。 : 所以想問問看除了使用 strcpy() 函數設定字串以外,有沒有其他的方法? : (Dev C++, Windows Vista) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.138.72

01/23 23:04, , 1F
恩...我想我瞭解了,也就是說要賦予初值必須在宣告的
01/23 23:04, 1F

01/23 23:04, , 2F
時候就賦予,不可以宣告完畢以後才賦予,這樣對嗎?
01/23 23:04, 2F

01/23 23:16, , 3F
怪怪的, 宣告完再賦值可以, 只是不能用那樣的語法賦值.
01/23 23:16, 3F

01/23 23:32, , 4F
我有點說錯了@@" 不過我大概瞭解了,謝謝
01/23 23:32, 4F

01/24 00:08, , 5F
宣告完當然不能用那樣的語法賦值
01/24 00:08, 5F

01/24 00:09, , 6F
char name[10]="Tony"
01/24 00:09, 6F

01/24 00:10, , 7F
compiler會在data segment預先放入"Tony"這個string
01/24 00:10, 7F

01/24 00:10, , 8F
然後再把*name這個pointer指到這個string上
01/24 00:10, 8F

01/24 00:11, , 9F
sorry打錯了,應該是stu.name = "Tony"
01/24 00:11, 9F

01/24 00:12, , 10F
主要的問題是stu.name是const pointer
01/24 00:12, 10F

01/24 00:13, , 11F
初始化後就不能指到其他的address了
01/24 00:13, 11F

01/24 23:20, , 12F
因為name[]=CONSTANT_STRING的init會被翻譯為lodsb,movsb
01/24 23:20, 12F
文章代碼(AID): #1BMme3zH (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BMme3zH (C_and_CPP)