C语言如何读取未知长度的数据存储到数组并结束
时间: 2024-09-08 14:02:39 浏览: 33
在C语言中,读取未知长度的数据并存储到数组中通常需要借助动态内存分配或者循环读取的方式。由于C语言标准库函数并没有直接支持读取未知长度数据的功能,我们可以使用`scanf`函数配合`%c`格式符逐个字符读取,直到遇到特定的结束条件。下面是一个使用这种方法的示例:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int count = 0;
char *array = NULL;
int capacity = 10; // 初始分配10个字符的空间
array = (char *)malloc(capacity * sizeof(char)); // 动态分配内存
if (array == NULL) {
perror("内存分配失败");
exit(EXIT_FAILURE);
}
printf("请输入字符(以回车结束):\n");
char ch;
// 读取字符直到遇到回车
while ((ch = getchar()) != '\n' && ch != EOF) {
if (count >= capacity) {
// 扩展数组容量
capacity *= 2;
array = (char *)realloc(array, capacity * sizeof(char));
if (array == NULL) {
perror("内存重新分配失败");
free(array);
exit(EXIT_FAILURE);
}
}
array[count++] = ch;
}
// 将最后一个字符设置为字符串结束符'\0'
if (count > 0) {
array[count] = '\0';
printf("你输入的数据是:%s\n", array);
}
// 释放动态分配的内存
free(array);
return 0;
}
```
在上述代码中,我们首先分配了一个足够大的空间来存储字符数组,并使用`malloc`函数进行动态内存分配。然后,我们使用一个循环来读取用户输入的每个字符,直到遇到换行符`\n`或文件结束符`EOF`为止。在这个过程中,如果字符数组的容量不足以存储更多的字符,我们会通过`realloc`函数来扩展数组的容量。最后,我们输出用户输入的数据并释放动态分配的内存。