簡體   English   中英

使用C中的fgets輸入動態大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM