修改
我想创建一个可以使用长号的程序。将要求用户输入他们想要使用的号码的长度(以数字为单位)。有一个
char aa [the chosen length goes here];
[]括号中的值应该是用户输入的值。 它看起来像这样:
“请输入数字长度” 有一个scanf,你输入,例如,17 然后创建一个char aa [17]
我只是不知道如何使用变量在[]括号中输入一个值来定义为char保存的内存大小
答案 0 :(得分:1)
你想要一个变量长度数组,你可以这样做:
int digit;
scanf("%d", &digit);
char test [digit+1];
这将适用于您的目的。通常的限制当然适用。 请记住,此功能仅在C99标准中添加。因此,如果您的编译器仅支持以前的标准,那么这将不起作用。
但是,更合适和更好的练习方法是使用malloc
正确分配char数组
int digit;
scanf("%d", &digit);
char* aa = malloc(digit + 1);
//Do what you want with the char array aa
free(aa);
不要忘记检查malloc()
对NULL
的结果,然后释放变量以防止内存泄漏(如果你想这样做。)
还要注意"数组" malloc
返回实际上只是一个指针,在尝试使用sizeof
确定其大小/长度时非常相关:
char real_array[5];
sizeof(real_array); // == 5
char* dynamic_array = malloc(5);
sizeof(dynamic_array) // == sizeof(char*) == on most systems = 8
答案 1 :(得分:-1)
您要问的是可变长度数组,这在C99中是可能的。见Dynamic array allocation on stack in C
请查看以下代码段:
int size;
scanf("%d", &size);
char array[size + 1]; //1 extra space to accommodate `\0` character
printf("%d\n", sizeof(array));
这将打印sizeof(char) * (size+1)
动态证明数组创建。
这种方式相对于malloc
方式的唯一缺点是在声明一个数组(用户输入大小)之后,你无法改变程序中的数组大小。它已修复。
使用动态内存分配(malloc
,calloc
)时,您可以通过free
内存在程序中尽可能地更改数组大小。
由于c99中可以使用可变长度数组,因此您可能必须使用gcc --std=c99 -c program.c
来编译源代码。对于其他编译器,请参阅正确的编译器手册。