根据我的理解,char* X是C中指向单个字符或字符数组(字符串)的变量。
char**是一个指向另一个指针的指针,该指针最终指向单个字符或字符数组。
ifint**相当于创建多维数组,为什么我不能使用 C 创建字符串数组char**?
const char** day = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
Run Code Online (Sandbox Code Playgroud)
这里*day会指向数组本身并**day会指向数组的第一个元素“Sunday”?
为什么我不能使用 char** 在 C 中创建字符串数组?是的,你可以创造。正确的方法是使用char 指针数组而不是像您那样使用双char**指针。例如
const char* day[7] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
Run Code Online (Sandbox Code Playgroud)
上面day是字符指针数组,它的每个元素都是字符指针,每个元素都需要指向有效地址。这day[0]是字符指针及其指向sunday有效地址的字符串文字。
也可以通过char**但不是像你那样的方式。例如
char **day = {"sunday", "Monday" };
Run Code Online (Sandbox Code Playgroud)
这里的问题是您没有为 分配内存day[0]来day[1]保存一些字符串文字,例如sunday& 等。
首先分配内存day如下
char **day = malloc(NUM_OF_DAYS * sizeof(*day)); /* define NUM_OF_DAYS as 7 */
Run Code Online (Sandbox Code Playgroud)
然后为等分配内存day[0]。day[1]
for(int index =0 ; index < NUM_OF_DAYS; index++) {
day[index] = malloc(MAX_DAY_SIZE * sizeof(**day)); /* define this MACRO */
}
Run Code Online (Sandbox Code Playgroud)
然后在运行时扫描数据。