作者firejox (Tangent)
看板C_and_CPP
標題Re: [問題] 迴圈裡面宣告的變數
時間Sun Apr 17 00:58:07 2011
※ 引述《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