作者Xphenomenon (啦 )
看板C_and_CPP
標題[問題] C 這樣的 assign 是合法的嗎?
時間Tue Feb 24 16:52:42 2009
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
1F:→ pponywong:你的想法是對的..要先malloc在strcpy 02/24 16:56
2F:推 ledia:直接 = "hello" 也是對的, 只是它唯讀 02/24 17:21
3F:→ ledia:指標可以指到某個 constant literal 上, 也可以經由配置記 02/24 17:22
4F:→ ledia:憶體之後再賦值, 甚至可以讓它指向 static array 使用該空間 02/24 17:22
5F:推 zlw:合法是指?編譯是可以通過的。ob.str1是指標,記憶體位址可以 02/24 17:29
6F:→ zlw:隨你高興指定,只不過指標所指的東西,被認定為唯讀而已 02/24 17:29
7F:→ zlw:ob.str1="Hello"這種寫法,很可能出現的就是拿來當參數傳值 02/24 17:31
8F:→ zlw:如果是這種用法就不必做malloc了 02/24 17:31
9F:→ Xphenomenon:感謝! 02/25 21:44