如何为char长度解析变量?

时间:2016-01-07 09:01:25

标签: c arrays variables char

修改

我想创建一个可以使用长号的程序。将要求用户输入他们想要使用的号码的长度(以数字为单位)。有一个

char aa [the chosen length goes here];

[]括号中的值应该是用户输入的值。 它看起来像这样:

“请输入数字长度” 有一个scanf,你输入,例如,17 然后创建一个char aa [17]

我只是不知道如何使用变量在[]括号中输入一个值来定义为char保存的内存大小

2 个答案:

答案 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方式的唯一缺点是在声明一个数组(用户输入大小)之后,你无法改变程序中的数组大小。它已修复。

使用动态内存分配(malloccalloc)时,您可以通过free内存在程序中尽可能地更改数组大小。

由于c99中可以使用可变长度数组,因此您可能必须使用gcc --std=c99 -c program.c来编译源代码。对于其他编译器,请参阅正确的编译器手册。