我正在观看教科书中的一项练习:创建一个C程序,从键盘上取一个长度为" N"
的数组。问题是:在C语言中,如何创建未定义的长度数组?
谢谢大家。
答案 0 :(得分:3)
不要创建未定义长度的数组。
在获得所需长度N
之后,如果C99使用VLA(可变长度数组)
int A[N];
...或分配内存
int *A = malloc(sizeof *A * N);
...
// use A
...
free(A);
[编辑]
在继续之前在N
上添加验证很方便。例如:
if (N <= 0 || N >= Some_Sane_Upper_Limit_Like_1000) return;
答案 1 :(得分:2)
有关c99 The New C:Why Variable Length Arrays?
中VLA的更多信息super
答案 2 :(得分:0)
要满足100%的需求并不容易,但你可以尝试一下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *addMe(void);
int main(void){
char *test = addMe();
free(test);
return 0;
}
char *addMe(void){
unsigned int maxLength = 15;
unsigned int i =0;
char *name;
int c;
name = malloc(1);
if(name == NULL){
exit(1);
}
printf("Enter your name:> ");
while ((c = getchar()) != '\n' && c != EOF) {
name[i++] = (char) c;
if (i > maxLength) {
printf("Names longer than %d not allowed!\n",maxLength);
name[maxLength] = '\0';
break;
}else if (i < maxLength){
name = realloc(name, maxLength + 2);
}
}
name[i] = '\0';
printf("Your name is:> %s\nThe length is:> %zu\n",name ,strlen(name));
return name;
}
输出:
Enter your name:> l Your name is:> l The length is:> 1
正如您可能已经注意到我只为一个字母分配了内存,如果您需要更多内存,它将被分配以满足您的需求。您也可以使用此方法控制最大大小:
Enter your name:> Michael jacksonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn Names longer than 15 not allowed! Your name is:> Michael jackson The length is:> 15
就像我说的那样,试一试。