我想使用指针即时初始化一个字符数组。即用户输入不知道数组的大小。用户一直提供输入,直到按下返回。这里的条件是:
- 使用指针初始化
- 不要提前传递数组的大小。
我想使用指针即时初始化一个字符数组。即用户输入不知道数组的大小。用户一直提供输入,直到按下返回。这里的条件是:
假设一个 C 问题,如何(未经测试):
char *arr = malloc(10);
size_t size = 10, index = 0;
int ch;
while ((ch = getc(stdin)) != EOF && ch != '\n' && ch != '\r') {
if (index >= size) {
size *= 2;
arr = realloc(arr, size); /* XXX check it first. */
}
arr[index++] = ch;
}
arr[index] = 0;
如果它真的是一个 C++ 问题,你想要std::getline
一个std::string
.
std::string 有一个方法push_back
std::vector 也可以完成这项工作。尽管如此,如果您真的被迫使用动态数组和字符指针,我建议您实施类似于向量中使用的重新分配策略 - 每次元素数量大于当前大小时,大小加倍。