[英]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.