gpt4 book ai didi

c - 这个简单的程序是如何工作的,与 I/O 相关

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:48 25 4
gpt4 key购买 nike

这是我的程序:

#include <stdio.h>
int main(int argc, char* argv[]) {
char buf[1024] = {0};
setvbuf(stdout, buf, _IOFBF, 1024);
printf("error\n");
printf("%s\n", buf);
}

这是输出:

error
error

Exited: ExitFailure 7

为什么第 3 行和第 4 行都是空行?字符 '\n' 不是刷新输出缓冲区并稍后被丢弃吗?

最佳答案

您肯定会调用未定义(或至少未指定)的行为。您声明一个缓冲区,然后通过 setvbuf 将其传递给 stdout。从那时起,缓冲区由 stdout 而不是你拥有,拥有。这意味着您可能无法再访问它。但这正是您所做的。

我无法从标准的措辞中证明这一点,但肯定有一些段落组合可以得出我的结论。

更新:ISO C99 在 7.19.5.6p2 中关于 setvbuf 函数的说明:数组的内容在任何时候都是不确定的。所以你所看到的只是巧合。您可能还会看到其他任何内容,仅靠 ISO C99 并不能保证。

更新 2: 因为数组的内容是不确定的,所以它们也可能都是非空字符。在这种情况下,buf 不再包含 string。因此,您显然调用了未定义的行为

关于c - 这个简单的程序是如何工作的,与 I/O 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com