问题描述
在C而不是C ++中,我尝试使用const int中包含的strlen()设置char数组大小。
char *input = "hello";
//Now the integer that contains the lenght
static const int lengthA = strlen(input); //upto here,it works
char list_array[lengthA]; //here doesn't work,because the variable lengthA is not initialized
因此,我希望将 input 的长度用作数组的长度。
我已经尝试使用 sizeof ,而不是 strlen ,但是它返回了字节
这可能吗?
解决方法
您正在使用的功能称为可变长度数组,其中数组的大小在运行时确定。但是,Visual Studio不支持此功能。
您需要使用malloc
动态分配内存:
char *input = "hello";
static const int lengthA = strlen(input);
char *list_array = malloc(lengthA);
,
- 使用正确的类型。
strlen
返回size_t
而不返回int
- 您只能使用常量表达式初始化静态和全局变量。您不能使用任何函数调用或变量来对其进行初始化。
- 您可以使用非常数表达式来初始化和定义自动变量。
char *input = "hello";
char input1[] = "hello";
static const size_t lengthA = sizeof(input1);
char list_array[sizeof(input1)];
void foo(void)
{
const size_t lengthA = strlen(input);
char listArray[lengthA + 1];
}
节点是局部变量定义中的+1
。您需要它来容纳字符串以及终止的空字符
请尝试这个。
char *list_array = calloc(lengthA,sizeof(char));