使用动态内容声明arraz

时间:2015-10-31 18:42:27

标签: c arrays variables char declaration

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

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

但是没有可能编译我也试过这样的事情

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

如果你想动态增长某些内容,只有一个选项:使用<{1>},malloc()函数,使其成为分配的对象并自行管理内存。 calloc()realloc()。所有这些功能都是标准C的一部分,因此您应该阅读它们。典型用法(与您的问题无关)将类似于:

free()

这是非常简化的,您可能将容器定义为#include <stdlib.h> 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; } ,其中包含指向“数组”的指针以及容量和计数成员,并在某些现实代码中定义在该结构上工作的函数。或者您可以在库中使用预定义的容器,例如glib