在C语言中,有什么方法可以将字符串的长度应用于数组的大小吗



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

在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;
}
无法初始化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;
}

测试代码(在线示例(:

#include <stdio.h> 
//#include <stdlib.h> 
#include <string.h> 
int main (void) 
{  
const char *x = "Hello"; 
int x_integer[strlen(x)];
int len_x = strlen(x);
for ( int i = 0; i < len_x; i++ )
{
x_integer[i] = 0;
}
for ( int i = 0; i < len_x; i++ )
{
printf("%dn", x_integer[i]);
}   
return 0;
}

执行:

./a.out
0
0
0
0
0

最新更新