[英]Input of dynamic size using fgets in C
我想要一個字符串(可以包含空格)作為輸入。 我想做動態分配。 我的程序結構有點像這樣。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct msgclient
{
int msglen;
int msgtype;
char *cp;
}M1;
int main()
{
M1 *m;
m=malloc(sizeof(M1));
m->msglen=5;
m->msgtype=6;
printf("Enter\t");
fgets(m->cp,50,stdin); //here
// m->cp[strlen(m->cp)]='\0';
printf("\n%d\n%d\n",m->msglen,m->msgtype);
fputs(m->cp,stdout);
return 0;
}
我想知道如何獲得輸入。 fgets的第二個參數是否有任何動態?
使用getline(3) - 而不是fgets(3) - 它讀取動態分配的行。
typedef struct msgclient {
ssize_t msglen;
int msgtype;
char *cp;
}M1;
然后在你的main
功能
M1 *m;
m=malloc(sizeof(M1));
if (!m) { perror("malloc"); exit(EXIT_FAILURE); };
m->msglen=0;
m->msgtype=6;
m->cp = NULL;
printf("Enter\t");
fflush(stdout);
size_t msgsize = 0;
m->msglen = getline(&msg->cp, &msgsize, stdin);
您可以考慮添加緩沖區的分配大小(即msgsize
)作為struct msgclient
的附加字段
請注意,您可能會考慮使用GNU readline 。 它提供版本和完成設施(從終端閱讀時)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.