我有一个字符串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;
}
首先在定义内部的下标运算符内部使用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