看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《robertshih (施抄)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : gcc version 4.5.2 : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 無 : 問題(Question): : for(i=0; i<100; i++){ : char str[100]; : printf("str = %p\n", str); : ... : } : 在這100次的迴圈中, 我需要每次都有一個新的array, : 所以在迴圈中宣告變數, 希望每次都是不同的address. : 可是output顯示, 這些str的都是同一個, : 請問有無辦法讓每次迴圈中的str都是不同的值(address). : 我知道使用malloc可以達到這個效果, 請問有無不用malloc的辦法? : 另外這個100是舉例, 事實上我並不知道我總共會須要用幾個str, : 所以無法事先宣告. : 謝謝 以下只是個人的拙見 有錯請各位大大們幫忙指正 我來說明一下我的code #include<stdio.h> #define len 100 typedef char String[100]; String s[0]; int main(void){ int i; String *p=s; for(i=0;i<100;i++){ printf("str = %p\n",p); p++; } return 0; } 一般而言 如果宣告array[n] 代表array 是有n個陣列 如果是array[0] 呢 0個陣列 就像指標 由於宣告的是陣列 所以本身會在可使用的地方 還有一點是 因為c並不會判斷是否超過宣告的範圍 他允許超出陣列 在陣列之後的他不會去定義 一切都得看系統決定 所以也有 segment fault的風險 不過要宣告array[0]還要看compiler 一些老舊的compiler並不會去處理就是了 現在還有直接宣告array[]的作法 不過似乎是屬於C9x的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.128.241 ※ 編輯: firejox 來自: 123.240.128.241 (04/17 01:01)
purpose:不能保證 p[很大正整數] 一定能寫入而不會 seg. fault 04/17 01:07
OppOops:懂了..感謝,不過這作法感覺很危險 04/17 01:23
CrBoy:只有遞增指標 那塊空間不會跟別的變數重疊到嗎? 04/19 12:28
firejox:會 所以要小心使用 04/19 23:11