C通过strlen()设置数组大小

时间:2020-10-16 22:26:08

标签: arrays c pointers char string-length

在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 ,但是它返回了字节

这可能吗?

3 个答案:

答案 0 :(得分:1)

您正在使用的功能称为可变长度数组,其中数组的大小在运行时确定。但是,Visual Studio不支持此功能。

您需要使用malloc动态分配内存:

char *input = "hello";
static const int lengthA = strlen(input);
char *list_array = malloc(lengthA); 

答案 1 :(得分:0)

  1. 使用正确的类型。 strlen返回size_t而不返回int
  2. 您只能使用常量表达式初始化静态和全局变量。您不能使用任何函数调用或变量来对其进行初始化。
  3. 您可以使用非常数表达式来初始化和定义自动变量。
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。您需要它来容纳字符串以及终止的空字符

答案 2 :(得分:-1)

请尝试这个。

char *list_array = calloc(lengthA, sizeof(char));
相关问题