簡體   English   中英

將字符串數組分配給char **

[英]Assigning array of strings to char **

在C中,我知道你可以為char指針分配字符串,所以通過擴展,為什么會失敗呢? 所以,我有一個char雙指針,並說最初我希望它有一定的值。 然后我完成了使用它們,我想重新分配它。

char **notes = {
    "C4", "C5", "A3", "A4", "A3#", "A4#", "REST",
    "C4", "C5", "A3", "A4", "A3#", "A4#", "REST",
    "F3", "F4", "D3", "D4", "D3#", "D4#", "REST",
    "F3", "F4", "D3", "D4", "D3#", "D4#", "REST",
    "D4#", "D4", "C4#", "C4", "D4#", "D4", "G3#",
    "G3", "C4#", "C4", "F4#", "F4", "E4", "A4#",
    "A4", "G4#", "D4#", "B3", "A3#", "A3", "G3#"
};

// do something with notes, then

notes = {
    "C3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "C3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "D3#", "D3", "C3#", "C3", "D3#", "D3", "G2#",
    "G2", "C3#", "C3", "F3#", "F3", "E3", "A3#",
    "A3", "G3#", "D3#", "B2", "A2#", "A2", "G2#"
};

我收到錯誤:

error: expected expression
notes = {
        ^

(獎勵指向任何可以識別歌曲的人。提示:將銳利切換到等效的平面)

您應該在聲明它的位置初始化它,而不是作為單獨的步驟。

char** notes = {
    "C3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "C3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "D3#", "D3", "C3#", "C3", "D3#", "D3", "G2#",
    "G2", "C3#", "C3", "F3#", "F3", "E3", "A3#",
    "A3", "G3#", "D3#", "B2", "A2#", "A2", "G2#"
};

如果您稍后嘗試修改它,上面會導致未定義的行為。 如果你想要一個可變數組,一個選項是使用二維數組表示法( char notes[][4] = ... ),但這會導致這種格式的空間浪費,因為你需要4個字符每個元素存儲,因為最長的字符數組長度為4,非空值為3,空值為1。

更新:如果您正在使用C99,則可以使用復合文字來使右側成為表達式,從而以下列方式重新分配給它。

char** notes;
notes = (char*[]) {
    "D3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "C3", "C4", "A2", "A3", "A2#", "A3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "F2", "F3", "D2", "D3", "D2#", "D3#", "REST",
    "D3#", "D3", "C3#", "C3", "D3#", "D3", "G2#",
    "G2", "C3#", "C3", "F3#", "F3", "E3", "A3#",
    "A3", "G3#", "D3#", "B2", "A2#", "A2", "G2#"
};

示例: https//ideone.com/eD1xFu

暫無
暫無

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

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