假设我有一个变量:
char** code;
然后我做了:
*code[0] = "Lucas"
有效的说法是,**code
包含一系列指针(*code
是我正在创建字符串的数组)并且*code[0]
将等于"Lucas"
并且*code[0][2]
将等于'c'
?
对不起,如果看起来很简单,我会对双指点感到困惑!提前谢谢!
-Lucas Giancola
答案 0 :(得分:3)
有效的说法是,**code
包含一系列指针
不,不是。您已为单个指针分配了空间。你告诉编译器该指针将指向另一个指向一个字符(你还没有创建过)的指针(你还没有创建)
*code[0] = "Lucas"
不是有效的代码而且没有编译
prog.cpp:6:8: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
*f[0] = "Lucas";
答案 1 :(得分:2)
如果你有
char** code;
*code[0] = "Lucas";
由于您没有为code
分配任何内存,因此您将遇到未定义的行为。
您需要使用:
char** code = malloc(SOME_SIZE*sizeof(*code));
即使在那之后,使用:
*code[0] = "Lucas";
不好。这有几个问题。
code[0]
是一个指针。 *code[0]
是指针解除引用。如果code[0]
中已有一些字符串,则*code[0]
将成为该字符串的第一个字符。因此,这项任务是错误的。
此外,"Lucas"
将位于已编译代码的只读部分。在将"Lucas"
分配给strdup
类型的变量之前,您需要使用char *
复制 code[0] = strdup("Lucas");
。
您需要以下内容:
code[0]
现在您可以使用*code[0]
来访问整个字符串。您可以使用code[0][0]
访问该字符串的第一个字符。您还可以使用{{1}}来访问该字符串的第一个字符。