如果我这样做
int res = puts("hello world");
在撰写"hello"
之后会发生错误,它会返回EOF
还是5?
http://pubs.opengroup.org/onlinepubs/9699919799/functions/puts.html似乎并不十分明确。
显然http://pubs.opengroup.org/onlinepubs/9699919799/functions/fwrite.html
确实可以处理部分成功(虽然我认为如果size!=1
必须有一些信息丢失),但stdio
家族的其余部分呢?
答案 0 :(得分:4)
从您链接到puts
的POSIX参考:
成功完成后, puts()将返回非负数。否则,它应返回EOF,应为流设置错误指示符,并设置 errno 以指示错误。
非常明确地说:如果在输出过程中的任何地方或任何时间出现错误,则会返回EOF
,并且errno
将被适当设置。如果所有输出都成功发送到输出流,则puts
函数仅返回成功。
至于其他功能,它们包含类似的注释,说明成功或失败时会发生什么。如果某个函数可以部分成功,例如the fwrite
function,它会说明一些效果:
成功写入的对象数,如果发生错误,可能会少于计数。
答案 1 :(得分:1)
即使是部分成功也是写错误。所以函数返回EOF
。
C99规范中的第7.19.7.10-3章明确说:
返回
如果发生写入错误,puts函数返回EOF;否则它返回一个非负值。