Re: [問題] 迴圈裡面宣告的變數

看板C_and_CPP作者 (Tangent)時間13年前 (2011/04/17 00:58), 編輯推噓2(202)
留言4則, 4人參與, 最新討論串2/4 (看更多)
※ 引述《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)

04/17 01:07, , 1F
不能保證 p[很大正整數] 一定能寫入而不會 seg. fault
04/17 01:07, 1F

04/17 01:23, , 2F
懂了..感謝,不過這作法感覺很危險
04/17 01:23, 2F

04/19 12:28, , 3F
只有遞增指標 那塊空間不會跟別的變數重疊到嗎?
04/19 12:28, 3F

04/19 23:11, , 4F
會 所以要小心使用
04/19 23:11, 4F
文章代碼(AID): #1DgSgYVr (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DgSgYVr (C_and_CPP)