簡體   English   中英

復合文字有沒有辦法在c99中有可變長度?

[英]Is there any way for a compound literal to have variable length in c99?

我知道通過正常聲明數組,可以在運行時確定長度的數組:

char buf[len];

而且我知道我可以將數組聲明為復合litral並將其分配給中間的指針:

char *buf;
....
buf = (char[5]) {0};

但是,將兩者結合起來並不起作用(標准不允許)。

我的問題是:有沒有辦法實現以下代碼的效果? (注釋len

char *buf;
....
buf = (char[len]) {0};

謝謝。

該語言明確禁止這一點

6.5.2.5復合文字

約束

1類型名稱應指定對象類型或未知大小的數組,但不能指定可變長度數組類型。

如果你需要這樣的東西,你必須使用一個命名的VLA對象而不是compund literal。 但請注意,VLA類型不接受初始值設定項,這意味着您無法執行此操作

char buf[len] = { 0 }; // ERROR for non-constant `len`

(我不知道這種限制背后的理由是什么。)

因此,除了使用命名的VLA對象之外,您還必須想出一些方法來將其歸零,例如memset或顯式循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM