C中未定义长度的数组

我正在看我的教科书中的一个练习:创建一个C程序,从键盘上取一个长度为“N”的数组。

问题是:在C语言中,如何创建未定义的长度数组?

谢谢你们。

不要创建未定义长度的数组。

获得所需的长度N ,如果C99使用VLA(可变长度arrays)

 int A[N]; 

……或者分配记忆

 int *A = malloc(sizeof *A * N); ... // use A ... free(A); 

[编辑]

很高兴在继续之前在N上添加validation。 例:

 if (N <= 0 || N >= Some_Sane_Upper_Limit_Like_1000) return; 

有关c99中VLA的更多信息新C:为什么可变长度数组?

 #include  int main(){ int n; printf("size of array: "); scanf("%d",&n); // limit, and erro verification omited int f[n],i; printf("\nREADING INPUT\n"); for(i=0;i 

要满足100%的需求并不容易,但你可以尝试一下:

 #include  #include  #include  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 

就像我说的那样,试一试。