gpt4 book ai didi

c - 当与 write() 作为参数一起使用时,来自 printf 的数据被写入文件

转载 作者:行者123 更新时间:2023-11-30 14:35:05 24 4
gpt4 key购买 nike

我写这篇文章是为了在某个文件中写入一些数据:

//CODE 1
int retval=open("hello.txt",O_WRONLY|O_CREAT|S_IRUSR);
int len=6;

if(retval<0)
{
printf("wrong\n");
}
else
printf("abcd %ld",write(retval,"hello",len));

现在我注意到,如果我增加 len 的值(比如len=9):

//CODE 2 with value of len=9
int retval;

while((retval=getchar())!=EOF)
{
if(retval!='\0')
printf("%c",retval);
else
{
printf("\n\nfound null-termination\n\n");
}
}

第二个代码的输出是:

//value of len is 9 in this case
hello

found null-termination

abc

现在我无法理解 printf 中的 abcd 是如何插入到文件中的 - 是因为 printf 中的数据是不等待输出流中的数据刷新到文件中(首先由 write() 插入),因此两者都被写入文件中?

最佳答案

你所拥有的是未定义的行为!具体来说,在对 write 的调用中,您给出长度为 5 的字符串文字作为第二个参数,但告诉它,在第三个参数中,有 9 字节。

就您而言,我认为编译器将 abcd %ld 数据(也是字符串文字)立即放置在内存中的 hello 数据之后,这就是为什么它正在写abcd

但是顺便说一句,这不应该被依赖!这完全取决于编译器如何在内存中排列此类字符串文字数据。完全由程序员来确保 write 的“size”参数有效 - 您的 9不是 有效,因此未定义的行为

PS:对 write 的调用将在调用 printf 函数之前执行 - 这是不是未定义。

关于c - 当与 write() 作为参数一起使用时,来自 printf 的数据被写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58683484/

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