【发布时间】:2016-08-02 11:53:43
【问题描述】:
strcpy()、malloc()、strlen() 和其他各种函数接受它们的参数或返回值作为 size_t 而不是 int 或 unsigned int,原因很明显。
fread() 和fwrite() 等一些文件函数也使用size_t。通过扩展,预计char* fgets (char *str, int num, FILE *stream) 应该使用size_t 而不是int 作为其缓冲区大小的参数。
但是,fgets() 使用 int。有没有客观的解释原因?
【问题讨论】:
-
C 标准库中没有一致性。功能随着时间的推移而发展。
size_t在引入fgets时可能不存在(只是我的猜测)。 -
看到这样的问题得到如此高的投票总是很茫然。我同意@P.P.:这是OT。
-
@user2064000 如果不太可能有任何真正的理由和引用——就像这里的情况——那么人们只会根据自己的想象力疯狂猜测,这让我们无处可去。这并不一定意味着您被暗示要求,但这可能是现实问题的结果。
-
这不是意见导向的:K&R 在第 155 页定义了
fgets()并带有int参数。他们的代码也可以使用unsigned int。size_t后来在 C89 (ANSI C) 中作为sizeof()的类型引入。因此更新了内存管理功能。但文件 I/O 不是:唯一使用size_t的文件函数是 C89 引入的,在 K&R 中不存在(例如:fread()/fwrite():K&R 仅在文件描述符上使用 unix 读/写对于 bloc 操作,当时没有 fread/fwrite )
标签: c language-lawyer size-t