如何获得输入大小与fgets?

  • 本文关键字:fgets 何获得 c
  • 更新时间 :
  • 英文 :


我有一个问题,检查输入字符串的大小与fgets。我想做的是

如果输入的大小大于buf_len则设置"more">

但是我不确定检查输入大小的正确方法是什么。

int read_stdin(char *buf, int buf_len, int *more)
{    // buf = malloc(10), buf_len = 10 , more = 1,
fgets(buf, buf_len, stdin) ;
size_t input_buf_len = strlen(buf);
printf("size of input: %zu n",sizeof(input_buf_len)); // prints 8
printf("buf: %lu n",sizeof(buf)); // prints 8
printf("buf_len:%lu n",sizeof(buf_len)); // prints 4
printf("stdin:%lu n",sizeof(stdin));// prints 8
if (input_buf_len > buf_len)
{
*more = 1;
printf("buf > buf_lenn");
}
*more = 0;
printf("buf < buf_len n");
return sizeof(buf);
}

不管输入长度有多大,可以是1或20,仍然输出与代码中注释相同的数字。

fgets()读取用户输入,并在读取换行符时停止。它返回:

  • 一个指针,指向如果操作成功将被读取的字符串
  • NULL失败或遇到EOF

要获得输入大小,首先必须用空终止符替换n,然后调用strlen()。这是因为strlen()在遇到空结束符时停止,但在遇到换行符时不停止:

if (!fgets(buf, buf_len, stdin)) {
// fgets failed...
} else {
buf[strcspn(buf, "n")] = '';
size_t input_buf_len = strlen(buf);
printf("Input length: %ld", input_buf_len);
}

fgets调用读取文本直到换行符,并将换行符包含在读取的文本中。如果fgets读取的内容没有以换行符结束,这意味着该行还有更多文本要读取。

如果fgets返回NULL,这意味着它达到了EOF,并且没有读取任何字符。

最新更新