将字符串数组分配给 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] = ...
),但这会导致浪费 space 这种格式,因为你需要存储 4 个字符作为最长字符数组的元素的长度为 4,3 个非空值和 1 个空值。
更新:
如果您使用的是 C99,compound literals 允许您将右侧设为表达式,然后按以下方式重新分配给它。
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#"
};
在 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] = ...
),但这会导致浪费 space 这种格式,因为你需要存储 4 个字符作为最长字符数组的元素的长度为 4,3 个非空值和 1 个空值。
更新: 如果您使用的是 C99,compound literals 允许您将右侧设为表达式,然后按以下方式重新分配给它。
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#"
};