[問題] C 這樣的 assign 是合法的嗎?

看板C_and_CPP作者 (啦 )時間15年前 (2009/02/24 16:52), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串1/1
struct TEST { const char *str1; const char *str2; }; int main(void) { struct TEST ob; ob.str1 = "hello" ob.str2 = "world" return 0; } ob.str1 是一個 const char *,但是我將他指向給某一固定字串,我知道在宣告的時候 是合法的: const char *str3 = "hello, world"; 但是 ob.str1 = "hello" 應該不是合法的,對吧?因為 str1 只是一個指標,應該先配 置一固定記憶體給他之後,再透過如 strcpy() 來進行配置。不知道我這樣的想法正不 正確。看 code 的時候,常常會遇到類似上面的寫法。 麻煩大大為我解答一下,謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.202.86.252

02/24 16:56, , 1F
你的想法是對的..要先malloc在strcpy
02/24 16:56, 1F

02/24 17:21, , 2F
直接 = "hello" 也是對的, 只是它唯讀
02/24 17:21, 2F

02/24 17:22, , 3F
指標可以指到某個 constant literal 上, 也可以經由配置記
02/24 17:22, 3F

02/24 17:22, , 4F
憶體之後再賦值, 甚至可以讓它指向 static array 使用該空間
02/24 17:22, 4F

02/24 17:29, , 5F
合法是指?編譯是可以通過的。ob.str1是指標,記憶體位址可以
02/24 17:29, 5F

02/24 17:29, , 6F
隨你高興指定,只不過指標所指的東西,被認定為唯讀而已
02/24 17:29, 6F

02/24 17:31, , 7F
ob.str1="Hello"這種寫法,很可能出現的就是拿來當參數傳值
02/24 17:31, 7F

02/24 17:31, , 8F
如果是這種用法就不必做malloc了
02/24 17:31, 8F

02/25 21:44, , 9F
感謝!
02/25 21:44, 9F
文章代碼(AID): #19exLR4y (C_and_CPP)