如何从控制台读取C行以不初始化像int buf[30];
这样的某个数组?我需要分配一次并且需要长度,即在读取之前我可以知道输入字符的数量...
是否有可能在C?
答案 0 :(得分:3)
在阅读之前,无法知道标准输入中可用的字符数。但是,您可以使用getline(3)
,它将读取\n
,然后在保存数据的动态分配缓冲区中返回数据(以及该缓冲区的大小)。完成后你必须释放缓冲区。
你应该知道这个例程会阻塞,直到它读取换行符。由于畸形输入处理不当,因此安全使用此例程也很困难。 (如果输入没有换行怎么办?)这是许多应用程序经常读取固定长度输入的原因之一。
答案 1 :(得分:-1)
我怀疑您所要求的是 动态内存 。 使用动态内存,我们可以创建具有动态容量的阵列,因此内部的插槽数量可以在运行时变化。这样,您无需决定编码特定阵列的大小。
要生成这种动态数组,您需要创建一个指向内存空间的指针。
int *array;
一旦我们在内存和变量之间建立了连接,我们现在需要设置我们想要多少内存(数组中有多少个插槽)。
array = (int *)malloc(sizeof(int) * numberOfSlots);
此函数 malloc 由一个名为stdlib.h的外部库提供。 它将请求计算机在内存中留出空间。该空间在这些括号()内定义。在那里设置要请求的字节数。
如果我们想要的是一个整数数组,我们将整数的大小乘以我们需要的插槽。
要访问或修改数组中的数据,可以使用[]保持简单,如下所示: array [0] = 1;
重要提示: 以前不要在没有请求内存的情况下访问或修改数组内的数据!
要读取一行中的字符数,您可以简单地使用循环,并逐字逐句阅读,直到找到'/ n'字符。