用动态内容声明arraz

你好我想制作程序,它会说明这个词中有多少大字母和短字母但是这个问题我不能动态地声明数组的内容。 这是所有C代码。 我试过这个

char something; scanf("%c",somethnig); char somethingmore[]=something; printf("%c",something[0]) 

但是编译不可能我也试过这样的东西

 char *something; scanf("%c",something); printf("%c",something[0]); 

有可能编译但被称为数组指针时压缩(如果命名是错误的我就是apoligize)我编程初学者所以这可能是愚蠢的问题。 这只是我运行的问题的一个例子,而不是我的程序的代码。

好吧,无视你的代码片段中奇怪的错误语法,我认为一个好的答案来提醒你一件事:

C不会为您执行任何内存管理

或者,换句话说,必须明确地管理内存。 因此,数组在C中具有固定大小(必须在编译时知道,因此编译器可以在二进制文件中保留适当的空间,通常在数据段中 ,或在堆栈中为局部变量保留)。

一个值得注意的例外是c99中的 可变长度数组 ,但即使使用它们,数组的大小也只能设置一次 – 初始化时。 无论是考虑这是一件好事还是仅仅是一种错误,这都是一种品味问题,但它无法解决你在运行时改变某些东西的问题。

如果你想动态增长某些东西,那么只有一个选择:使用函数malloc()calloc()realloc()free() ,使它成为一个已分配的对象并自己管理它的内存。 所有这些function都是标准C的一部分,因此您应该阅读它们。 典型用法(与您的问题无关)将类似于:

 #include  int *list = 0; size_t capacity = 0; size_t count = 0; void append(int value) { if (capacity) { if (count == capacity) { /* reserve more space, for real world code check realloc() * return value */ capacity *= 2; list = realloc(list, capacity * sizeof(int)); } } else { /* reserve an initial amount, for real world code check malloc() * return value */ capacity = 16; list = malloc(capacity * sizeof(int)); } list[count++] = value; } 

这是非常简化的,您可能将容器定义为包含指向“数组”的指针的struct ,以及容量和计数成员,并在某些现实代码中定义在该结构上工作的函数。 或者您可以在库中使用预定义的容器,例如glib