→ alongalone:你只是對arrary的技巧不懂而已..查資料就知道了 12/12 20:10
謝謝:)
這個問題我了解了
※ 編輯: Arim 來自: 218.173.163.186 (12/12 21:25)
各位版友好
對struct的動態配置的應用還不是很了解
例如
struct myFtphdr {
short mf_opcode;
unsigned short mf_cksum;
union {
unsigned short mf_block;
char mf_filename[1];
}__attribute__ ((__packed__)) mf_u;
char mf_data[1];
}__attribute__ ((__packed__));
我用printf("a = %d\n",sizeof(struct myFtphdr)); //6個byte
但是也可以這樣寫
struct myFtphdr *packet;
packet=(struct myFtphdr*) malloc(512+6);
配置512+6=518個byte給packet
但是packet所指向的struct最多只有佔6個byte吧?
那剩下的518-6=512個byte到哪裡去了@@? 還可以使用嗎?
因為配置完之後
竟然可以用
fread(packet->mf_data, 1, 512, fin) //分配512個byte給mf_data
但是mf_data不是只有一個byte嗎@@?
不太懂為甚麼可以這樣子寫
struct用動態配置之後,在記憶體裡面是長甚麼樣子?
一個簡單的測試是
struct test{
char a[1];
};
struct test *p;
p = (struct test *)malloc(500);
strcpy(p->a,"111111111111111111111111111111111111111");
printf("%s\n",p->a); //剛好是111111111111111111111111111111111111111
為什麼沒有overflow@@
而用
char *b;
b = (char *)malloc(1); //配置一個byte
/*char b[1];*/ //會overflow
strcpy(b,"123456789111111111111111111111111111111");
printf("%s\n",b);
printf("%c\n",b[5]); //印出6
謝謝各位版友的指教
--
~宅男的四個徵兆~
∠□ ○ ! * \○/ ★ (○ ?
╦╦└□ " ○□═ □ □>
║║√√ ╦══╦ ∥ |\
一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.169.131
※ 編輯: Arim 來自: 140.117.169.131 (12/12 13:13)
※ 編輯: Arim 來自: 140.117.169.131 (12/12 13:15)
※ 編輯: Arim 來自: 140.117.169.131 (12/12 14:19)