如何用for循环输入一个未知大小的二维字符数组
时间: 2024-11-12 20:46:04 浏览: 20
在C语言中,如果你想要处理未知大小的二维字符数组(例如,不确定有多少行和列),通常使用动态内存分配结合`fgets`或`getchar`函数会更合适,因为它们可以处理任意长度的字符串。下面是一个简单的示例,展示如何用`fgets`获取用户输入的字符二维数组:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
// 获取用户一行输入,然后转换为字符数组
char** get_input(int *rows) {
char input[100]; // 假设每行不超过99个字符
fgets(input, sizeof(input), stdin);
*rows = 1; // 初始行数假设为1
char **array = malloc(*rows * sizeof(char*)); // 分配第一行的空间
array[0] = strdup(input); // 将一行复制到新指针指向的内存
return array;
}
int main() {
int rows;
char **my_array = get_input(&rows);
// 遍历数组,直到所有行都被处理
while (my_array != NULL && my_array[*rows - 1] != '\0') { // 检查是否有剩余行
// 这里你可以做处理每行的操作,比如读取、分析或存储
printf("%s\n", my_array[*rows - 1]);
if (my_array[*rows] == '\n') { // 如果遇到换行符,表示这是新的一行
free(my_array[*rows - 1]); // 释放前一行
my_array[*rows] = '\0'; // 设置当前行结束符
(*rows)++;
} else {
break; // 否则,我们已经到达了最后一行
}
}
// 当不再有新行时,释放所有已分配的内存
for (int i = 0; i < *rows; i++) {
free(my_array[i]);
}
free(my_array);
return 0;
}
阅读全文