在C语言中,有没有办法将字符串的长度应用于数组的大小?

在C语言中,有没有办法将字符串的长度应用于数组的大小?,c,C,我有一个字符串x和一个数组x\u integer。 字符串x的长度为8,但当我使用该长度初始化数组时 intx_integer[strlen(x)]={0},它不允许我这样做,因为它需要常量值。 因此,除了使用#define SIZE 8之外,我还可以使用字符串的长度x并将其用于数组,因为我的字符串每次都会更改。VLAs无法初始化 首先在定义内部的下标运算符内部使用strlen: int x_integer[strlen(x)]; 然后,如果需要,您需要单独初始化x_integer的每个元素:

我有一个字符串
x
和一个数组
x\u integer
。 字符串
x
的长度为
8
,但当我使用该长度初始化数组时
intx_integer[strlen(x)]={0}
,它不允许我这样做,因为它需要常量值。
因此,除了使用
#define SIZE 8
之外,我还可以使用字符串的长度
x
并将其用于数组,因为我的字符串每次都会更改。

VLAs无法初始化

首先在定义内部的下标运算符内部使用
strlen

int x_integer[strlen(x)];
然后,如果需要,您需要单独初始化
x_integer
的每个元素:

int len_x = strlen(x);
for ( int i = 0; i < len_x; i++ )
{
    x_integer[i] = 0;
}

无法初始化VLA

首先在定义内部的下标运算符内部使用
strlen

int x_integer[strlen(x)];
然后,如果需要,您需要单独初始化
x_integer
的每个元素:

int len_x = strlen(x);
for ( int i = 0; i < len_x; i++ )
{
    x_integer[i] = 0;
}

在C中无法初始化自定义/可变长度数组

但是您始终可以使用
malloc()
calloc()
来分配请求的内存

对于您的用例,
calloc()
最适合,因为它将分配的内存设置为
0

此外,在执行操作后,不要忘记执行适当的内存管理。

请查看以下实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

    char* x = "test string";

    int* x_integer = (int*)calloc(strlen(x), sizeof(int));

    //Perform operation

    //Memory management
    free(x_integer);

    return 0;
}
#包括
#包括
#包括
int main(){
char*x=“测试字符串”;
int*x_integer=(int*)calloc(strlen(x),sizeof(int));
//执行操作
//内存管理
自由(x_整数);
返回0;
}

在C中无法初始化自定义/可变长度数组

但是您始终可以使用
malloc()
calloc()
来分配请求的内存

对于您的用例,
calloc()
最适合,因为它将分配的内存设置为
0

此外,在执行操作后,不要忘记执行适当的内存管理。

请查看以下实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

    char* x = "test string";

    int* x_integer = (int*)calloc(strlen(x), sizeof(int));

    //Perform operation

    //Memory management
    free(x_integer);

    return 0;
}
#包括
#包括
#包括
int main(){
char*x=“测试字符串”;
int*x_integer=(int*)calloc(strlen(x),sizeof(int));
//执行操作
//内存管理
自由(x_整数);
返回0;
}

是在函数内部还是在文件范围外部定义的
x_整数
?1)字符串是类似于
“abc”
的字符串文字吗?2) 您想将元素初始化为0以外的值吗?字符串是一个二进制数,我想将它转换为一个整数数组,其中包含这些数字是函数内部或文件范围外部定义的
x_integer
?1)字符串是类似于
“abc”
的字符串吗?2) 您想将元素初始化为0以外的值吗?字符串是一个二进制数,我想将其转换为一个包含这些数字的整数数组。这一个不起作用。由于x_integer[strlen(x)]将提示表达式需要为常量的错误。
将提示表达式需要为常量的错误。
您必须使用支持的兼容编译器。如果编译器不支持它们,则无法使用它们@Khanguyen请分享您使用的编译器、编译器版本和编译器选项。@Khanguyen那么您的编译器可能不支持使用VLAs。注意,在C99之后,并不是每个C实现都需要支持它。我这样做的时候它起作用了。我添加了一个示例,您可以在网上看到它是有效的。检查编译器上是否定义了宏
\uuuu STDC\u NO\u VLA\uuu
。如果是,则编译器没有VLA扩展。此扩展不起作用。由于x_integer[strlen(x)]将提示表达式需要为常量的错误。
将提示表达式需要为常量的错误。
您必须使用支持的兼容编译器。如果编译器不支持它们,则无法使用它们@Khanguyen请分享您使用的编译器、编译器版本和编译器选项。@Khanguyen那么您的编译器可能不支持使用VLAs。注意,在C99之后,并不是每个C实现都需要支持它。我这样做的时候它起作用了。我添加了一个示例,您可以在网上看到它是有效的。检查编译器上是否定义了宏
\uuuu STDC\u NO\u VLA\uuu
。如果是,则编译器没有VLA扩展。