提问人:Oh Oh 提问时间:5/13/2022 最后编辑:Oh Oh 更新时间:5/14/2022 访问量:270
有没有办法动态使用 FGETS 大小
is there a way to use fgets size dynamically
问:
所以我正在学习指针和动态内存,以及我如何尝试 fgets。
所以我想使用 fgets 将字符串输入到指针中,但我希望 fgets 大小使用我用于指针的 malloc 函数动态更改,有没有办法做到这一点? 例如
int main(){
char *text;
text =(char *)malloc(200 * sizeof(char));
fgets(text, n, stdin);
return 0;
}
解释
- 我创建了一个名为“text”的字符指针来最终存储字符串。
- 然后,我使用 malloc 计划来存储 200 个字符
- 接下来,我想使用 fgets 来接收用户输入的字符串,其中“n”是 malloc 为指针分配的文本大小?
我试过了,但它不起作用?fgets(text, sizeof(text), stdin);
答:
1赞
Jakub Bednarski
5/13/2022
#1
这是行不通的,因为 ptr 是指向 char 数组的动态指针,将始终是指针的大小(对于 64 位计算机为 8),而不是数组的大小。您必须:sizeof(ptr)
- 要么将 200 存储在某种变量中;或
- 静态地为文本分配内存,例如
char text[200];
0赞
chux - Reinstate Monica
5/14/2022
#2
一种常见的方法是分配一些上限大小缓冲区,然后调整其大小。
char *fgets_alloc(FILE *f, size_t max_size) {
char *buf = malloc(max_size);
if (buf) {
if (fgets(buf, max_size, f)) {
size_t sz = strlen(buf) + 1;
void *ptr = realloc(buf, sz); // Reduce allocation
if (ptr) {
buf = ptr;
}
return buf;
}
free(buf);
}
return NULL;
}
待办事项:处理过长行和超出范围的代码。max_size
int
评论
fgets(text, n, stdin);
:什么?n
n
n
malloc
fgets
fgets