如何在C中将整数存储在数组中?

ui7jx7zq  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在试着做一个程序,把一个字符串变成二进制。

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的数组,其中包含数字的二进制代码:但是当我试图编译代码时,我得到了这个错误:“错误变量大小的对象可能无法初始化”。我不知道这是什么意思。请让我知道我做错了什么。我是非常新的编码。

xt0899hw

xt0899hw1#

你有很多问题与此代码。
1.你不能给数组赋值(编译器会抱怨)
1.您返回对自动存储阵列的引用,当函数返回时,自动存储阵列将停止存在。

  1. int array2[len]如果array2具有静态存储持续时间,则长度必须为constant expression
lf5gs5x2

lf5gs5x22#

这个数组的初始化

int array2[len] = ascii_v(word, len);

在任何情况下都是不正确的,没有意义的。
数组可以使用字符串文字(如果是字符数组)或括在大括号中的初始化器列表进行初始化。
另一方面,函数ascii_v返回一个整数。这样的初始化在语法上是不正确的。
您似乎认为这个return语句

return array1[l];

返回一个完整的数组。实际上,这个return语句试图返回一个不存在的元素,该元素的类型为int,索引为l,而索引的有效范围为[0, l)
对于编译器产生的错误信息,那么你声明了一个大小不是整数常量表达式的数组。也就是说,你声明了一个可变长度数组。可变长度数组可能在它们的声明中没有初始化。
表达式len如下获得

int len = strlen(word);

不是常量整数表达式。不能在编译时计算。
来自C标准(6.7.9初始化)
3需要初始化的实体类型应为大小未知的数组或完整的对象类型**,而不是可变长度的数组类型**。
我想你的意思是类似以下的东西

size_t len = strlen(word);
int array2[len];

//...

void ascii_v( string w, int array[] )
{
    while ( *w ) *array++ = *w++;
}

相关问题