在开始之前,让我告诉你我的代码:
int main(int argc, char *argv[])
{
t_arbre *node;
char str[3][1];
&(*(str[0])) = strdup("1"); //lvalue required as left operand of assignment
str[1] = strdup("2"); //incompatible types when assigning to type ‘char[1]’ from type ‘char *’
str[2] = strdup("3");
if ((node = malloc(sizeof(t_arbre))) == NULL)
{
printf("Error: malloc in the main function failed\n");
return (-1);
}
create_node(node, str);
return (0);
}
所以,正如你所看到的,我现在正在使用C.而我正在尝试将(char *)分配给(char [3] [1])。否则编译器会抛出我的错误:
从类型'char *'指定类型'char [1]'时,不兼容的类型
当我尝试通过以下方式分配时:
str[2] = strdup("2");
我知道如果我声明一个像这样的字符串
char str[5];
然后尝试使用例如strdup()函数为其分配一个字符串,它可能会给我带来同样的错误。但是在这种情况下,我知道我可以“取消引用”它:
str[0]
这将给我一个(char)变量。鉴于我希望它存储一个字符串。我必须使用'&'将其“转换”为(char *) charactere。哪个会给我
&str[0]
在这种情况下,它会起作用。因为我有一个指向第一个字符的指针。 通过这样做,我将能够将(char *)复制到(char [])。
否则,在我提供给你的上层代码中,我想将一个(char *)复制到一个(char [3] [1])(不要问我原因,解释哈哈有点长) 所以你可以看到,我试着解决错误,如
str[2] = strdup("2");
给我这个错误信息
从类型'char *'指定类型'char [1]'时,不兼容的类型
通过这种方式
&(*(str[0])) = strdup("1"); //or &(*(str[0]))
给我这个错误信息
左值作为赋值的左操作数
有谁能告诉我如何将(char *)复制到(char [] [])? 或者做我想做的事情是不可能的? 我不会说英语,希望我使用正确的术语。
谢谢:)
答案 0 :(得分:3)
&
获取某些内容的地址,这实际上只是一个值,而不是存储某些内容(例如变量),然后尝试分配给它。char*
不是char[]
,这是不兼容类型错误的含义。arr[2]
),而不是3。使用strcpy()
代替将字符串复制到数组中:
char str[3][2]; // must allow space for the null terminator
strcpy(str[0], "1");
strcpy(str[1], "2");
strcpy(str[2], "3");
或者使用指针数组strdup()
:
char *str[3];
str[0] = strdup("1");
...
如果你这样做,请不要在完成后忘记释放它们,因为strdup()
会分配内存,例如
// free one pointer from the array:
free(str[0]);
// or if you have allocated to every value in the array:
size_t arr_len = sizeof(str) / sizeof(*str);
for (size_t n = 0; n < arr_len; ++n)
free(str[n]);
答案 1 :(得分:1)
viewWillTransitionToSize
返回一个指向char的指针。如果要将该指针存储在数组中,则需要一个指针数组,如此
strdup
答案 2 :(得分:1)
如果要复制整个字符串内容,可以使用strcpy
,但请注意,它会复制以空字符结尾的字符串。需要有最后一个空符号的位置。因此,字符串数组的长度必须至少为2(char str[3][2]
)才能复制像“1”这样的字符串。