C语言 是否有一种方法可以动态地使用fgets的大小



所以我正在学习指针和动态内存,以及如何使用fgets。

所以我想把一个字符串输入到一个指针使用fgets,但我想fgets大小动态改变与malloc函数,我用于指针有办法做到这一点吗?例如

int main(){
char *text;
text =(char *)malloc(200 * sizeof(char));
fgets(text, n, stdin);
return 0;
}

  1. 我创建了一个名为'text'的char指针来存储字符串。
  2. 然后使用malloc计划存储200个字符
  3. 接下来我想使用fgets来接收用户输入的字符串其中'n'是malloc为指针分配的文本大小?

我已经尝试过fgets(text, sizeof(text), stdin);,但它不工作?

这将不起作用,因为sizeof(ptr)中ptr是指向char数组的动态指针,将始终是指针的大小(64位机器为8),而不是数组的大小。你必须:

  • 将200存储在某种变量中;或
  • 静态地为文本分配内存,如char text[200];

一种常见的方法是分配一些上限大小的缓冲区,然后调整大小。

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范围。

相关内容

  • 没有找到相关文章

最新更新