C 计算存储在变量中的字符串并分配给数组

C 计算存储在变量中的字符串并分配给数组,c,arrays,string,arduino,initialization,C,Arrays,String,Arduino,Initialization,考虑一下这个例子 char x[] = "abcdef"; 这不会抛出任何错误 现在考虑第二种情况, String string = "abcdef"; char x[] = string; 第二个条件抛出一个错误“数组必须用括号内的初始值设定项初始化”。 我不理解这个错误。为什么我不能给数组分配一个字符串变量呢。因为它是Ardruno,我想它使用的是c编译器。 假设您使用的是C89,在C89中,数组的大小需要在编译时保持不变,因此您尝试的是不受支持的 当使用字符串定义数组时,编译器会注意到

考虑一下这个例子

char x[] = "abcdef";
这不会抛出任何错误

现在考虑第二种情况,

String string = "abcdef";
char x[] = string;
第二个条件抛出一个错误“数组必须用括号内的初始值设定项初始化”。
我不理解这个错误。为什么我不能给数组分配一个字符串变量呢。

因为它是Ardruno,我想它使用的是c编译器。 假设您使用的是C89,在C89中,数组的大小需要在编译时保持不变,因此您尝试的是不受支持的

当使用字符串定义数组时,编译器会注意到它是一个变量,而不是常量

String string = "abcdef";
char x[] = string; // string = variable, even if it doesn't change.

C99中支持可变长度数组,因此您可以使用C99编译器编译它,以防止出现错误

因为它是Ardruno,我想它使用的是c编译器。 假设您使用的是C89,在C89中,数组的大小需要在编译时保持不变,因此您尝试的是不受支持的

当使用字符串定义数组时,编译器会注意到它是一个变量,而不是常量

String string = "abcdef";
char x[] = string; // string = variable, even if it doesn't change.

C99中支持可变长度数组,因此您可以使用C99编译器编译它,以防止出现错误

在普通C中,字符串本身不是实体,它们只是
char
的数组,末尾是
null
。所以你的第一行就相当于:

char x[] = {'a','b','c','d','e','f','\0'};

<代码> string <代码>另一方面,似乎是C++类,在您的环境中可用,它也可以用文字字符串初始化。此类的实例不能直接分配给字符数组,因此在普通C字符串中的错误(可能有转换函数?

本身不是实体,它们只是字符数组,末尾有一个
null
。所以你的第一行就相当于:

char x[] = {'a','b','c','d','e','f','\0'};

<代码> string <代码>另一方面,似乎是C++类,在您的环境中可用,它也可以用文字字符串初始化。该类的实例不能直接分配给字符数组,因此会出现错误(可能在某个地方有转换函数?

这是哪种语言?@Konamiman,代码用于Arduino Sketch,用C/C++编写,我们可以在Arduino sketch中使用C/C++函数。字符串函数在Arduino IDE中使用。很抱歉在问题中没有明确说明这是哪种语言?@Konamiman,代码是用于Arduino sketch的,它是用C/C++编写的,我们可以在Arduino草图中使用C/C++函数。字符串函数在Arduino IDE中使用。很抱歉在问题中没有明确说明。是的,我在几个小时的撞击后得出了相同的结论。因此,我所做的是使用一个名为ToCharray()的预定义函数将字符串文字更改为char数组。是的,我在头晕了几个小时后得出了相同的结论。因此,我所做的是使用名为tocharray()的预定义函数将字符串文字更改为char数组。感谢编译器建议:)感谢编译器建议:)