所以我正在学习指针和动态内存,以及如何使用fgets。
所以我想把一个字符串输入到一个指针使用fgets,但我想fgets大小动态改变与malloc函数,我用于指针有办法做到这一点吗?例如
int main(){
char *text;
text =(char *)malloc(200 * sizeof(char));
fgets(text, n, stdin);
return 0;
}
- 我创建了一个名为'text'的char指针来存储字符串。
- 然后使用malloc计划存储200个字符
- 接下来我想使用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
范围。