“struct hack”在技術(shù)上是未定義的行為嗎?我要問的是眾所周知的“結(jié)構(gòu)的最后一個(gè)成員有可變長度”的技巧。它是這樣的:struct T {
int len;
char s[1];};struct T *p = malloc(sizeof(struct T) + 100);p->len = 100;strcpy(p->s, "hello world");由于結(jié)構(gòu)在內(nèi)存中的布局方式,我們能夠?qū)⒔Y(jié)構(gòu)覆蓋在一個(gè)大于必要的塊上,并將最后一個(gè)成員視為大于1 char指定。所以問題是:這種技術(shù)在技術(shù)上是未定義的行為嗎?..我原以為是這樣的,但我很好奇標(biāo)準(zhǔn)是怎么說的。PS:我知道C99的方法,我希望答案特別堅(jiān)持上面列出的技巧版本。
3 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
目前還不清楚它是合法的還是便攜的,但它相當(dāng)受歡迎。
..官方解釋認(rèn)為它并不嚴(yán)格符合C標(biāo)準(zhǔn),盡管它似乎在所有已知的實(shí)現(xiàn)中都有效。(仔細(xì)檢查數(shù)組邊界的編譯器可能會(huì)發(fā)出警告。)
數(shù)組下標(biāo)超出了范圍,即使一個(gè)對象顯然可以用給定的下標(biāo)(如lvalue表達(dá)式)訪問。
a[1][7]
鑒于聲明
int a[4][5]
) (6.5.6).
如果指針操作數(shù)和結(jié)果都指向同一個(gè)數(shù)組對象的元素,或者指向數(shù)組對象的最后一個(gè)元素,則計(jì)算值不會(huì)產(chǎn)生溢出;否則,行為將未定義。
- 3 回答
- 0 關(guān)注
- 546 瀏覽
添加回答
舉報(bào)
0/150
提交
取消