相关疑难解决方法(0)

fgets()是否在短缓冲区兼容的情况下返回NULL?

在单元测试中包含一个函数fgets(),当缓冲区大小时遇到​​意外结果n < 2.显然这样的缓冲区大小是愚蠢的,但测试正在探索极端情况.

简化代码:

#include <error.h>
#include <stdio.h>

void test_fgets(char * restrict s, int n) {
  FILE *stream = stdin;
  s[0] = 42;
  printf("< s:%p n:%d stream:%p\n", s, n, stream);
  char *retval = fgets(s, n, stream);
  printf("> errno:%d feof:%d ferror:%d retval:%p s[0]:%d\n\n",
    errno, feof(stream), ferror(stream), retval, s[0]);
}

int main(void) {
  char s[100];
  test_fgets(s, sizeof s);  // Entered "123\n" and works as expected
  test_fgets(s, 1);         // fgets() --> NULL, feof() --> 0, ferror() --> 0
  test_fgets(s, …
Run Code Online (Sandbox Code Playgroud)

c fgets language-lawyer

11
推荐指数
1
解决办法
1607
查看次数

标签 统计

c ×1

fgets ×1

language-lawyer ×1