无法使用 C 中的 write() 函数写入 .txt 文件

Cannot write to a .txt file using write() function in C

为了将一些随机字符写入文本文件,我编写了以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main()
{
    int input_f = open("./input.txt", O_CREAT | O_APPEND |  O_RDWR ,0666);
    int i;
    for(i=0;i<50;i++)
    {
        int r = rand()%252;
        printf("%d size of r: %d\n",i,sizeof(r));
        write(input_f,r,sizeof(r));
        printf("%d we just wrote %d which is %c\n",i,r,r);
    }

    close(input_f);
}

我正在寻找一些解决方案来做到这一点

也许这里有人知道我该如何解决这个问题?

write(input_f,r,sizeof(r));

应该是

write(input_f, &r, sizeof(r));

第二个参数是你要根据man page发送的buffer的地址。

您还应该检查函数的 return 值是否等于 sizeof r

write(input_f,r,sizeof(r)); 应该是 write(input_f,&r,sizeof(r)); 因为 write 需要一个指向要写入的数据的指针,而不是直接指向数据。

除此之外,您应该检查 open 调用的结果,而 write 调用可能会失败。

你叫 write 错了。

如果你包含 unistd.h,你会得到一个原型,编译器会更正你。

write(input_f,&r,sizeof(r)); //the 2nd arg is a void const*

此外,printfsize_t 个参数需要 "%zu",您应该检查错误。

别人已经说了为什么不行

我只想补充一点,你也应该写:

#include <unistd.h>

否则你会在编译过程中收到警告。

write() 函数不将 int 作为第二个参数,而是将缓冲区上的指针 (void *) 及其长度作为第二个参数。这意味着您必须先将 int 转换为缓冲区中的字符串(例如使用 sprintf()),然后将缓冲区输出到文件(使用 write())