看板 C_and_CPP 關於我們 聯絡資訊
各位版友好 對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)
alongalone:你只是對arrary的技巧不懂而已..查資料就知道了 12/12 20:10
謝謝:) 這個問題我了解了 ※ 編輯: Arim 來自: 218.173.163.186 (12/12 21:25)