我正在试着做一个程序,把一个字符串变成二进制。
int len = strlen(word);
int array2[len] = ascii_v(word, len);
int ascii_v(string w, int l)
{
int array1[l];
for (int i = 0, i < l; i++)
{
array1[i] = word[i];
return array1[l];
}
return array1[l];
}
“word”是从用户那里得到的字符串。
我打算这样做:从用户处获取单词,将该单词转换为每个字母的ASCII值的数组,将每个ACSII值转换为大小为8的数组,其中包含数字的二进制代码:但是当我试图编译代码时,我得到了这个错误:“错误变量大小的对象可能无法初始化”。我不知道这是什么意思。请让我知道我做错了什么。我是非常新的编码。
2条答案
按热度按时间xt0899hw1#
你有很多问题与此代码。
1.你不能给数组赋值(编译器会抱怨)
1.您返回对自动存储阵列的引用,当函数返回时,自动存储阵列将停止存在。
int array2[len]
如果array2
具有静态存储持续时间,则长度必须为constant expression
lf5gs5x22#
这个数组的初始化
在任何情况下都是不正确的,没有意义的。
数组可以使用字符串文字(如果是字符数组)或括在大括号中的初始化器列表进行初始化。
另一方面,函数
ascii_v
返回一个整数。这样的初始化在语法上是不正确的。您似乎认为这个return语句
返回一个完整的数组。实际上,这个return语句试图返回一个不存在的元素,该元素的类型为
int
,索引为l
,而索引的有效范围为[0, l)
。对于编译器产生的错误信息,那么你声明了一个大小不是整数常量表达式的数组。也就是说,你声明了一个可变长度数组。可变长度数组可能在它们的声明中没有初始化。
表达式
len
如下获得不是常量整数表达式。不能在编译时计算。
来自C标准(6.7.9初始化)
3需要初始化的实体类型应为大小未知的数组或完整的对象类型**,而不是可变长度的数组类型**。
我想你的意思是类似以下的东西