c语言如何处理未知长度的字符串数组作为输入?
时间: 2024-12-15 20:21:32 浏览: 24
c语言连接两个字符串.zip
在C语言中,处理未知长度的字符串数组通常涉及到动态内存分配和指针操作。当需要接收不确定数量的字符串作为输入时,可以使用`malloc`函数为每个字符串分配空间,并将它们链接起来形成一个动态数组。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STR_LENGTH 100 // 假设最大字符串长度
int main() {
int num_strings;
printf("请输入字符串的数量: ");
scanf("%d", &num_strings);
// 动态分配内存
char** string_array = malloc(num_strings * sizeof(char*));
for (int i = 0; i < num_strings; i++) {
// 为每个字符串分配空间并读取输入
char* input_string = malloc(MAX_STR_LENGTH * sizeof(char)); // 预留足够的空间
fgets(input_string, MAX_STR_LENGTH, stdin); // 注意这里要移除fgets的换行符
input_string[strlen(input_string) - 1] = '\0'; // 删除末尾的换行符
// 将字符串添加到数组中
string_array[i] = input_string;
}
// 现在你可以遍历这个字符串数组
for (int i = 0; i < num_strings; i++) {
printf("String %d: %s\n", i+1, string_array[i]);
}
// 记得释放所有动态分配的内存
for (int i = 0; i < num_strings; i++) {
free(string_array[i]); // 先释放字符串自身
}
free(string_array); // 最后释放整个数组的内存
return 0;
}
```
在这个例子中,用户会被询问要输入多少个字符串,然后程序会为每个字符串动态分配内存,存储用户的输入,并在完成后释放所占用的空间以防止内存泄漏。
阅读全文