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

时间:2017-04-06 11:55:45

标签: c system-calls

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

#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);
}

我找了一些解决方案来做到这一点

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

5 个答案:

答案 0 :(得分:2)

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

应该是

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

第二个参数是您要根据man page发送的缓冲区的地址。

此外,您应该检查函数的返回值是否等于sizeof r

答案 1 :(得分:1)

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

除此之外,您应该检查公开呼叫的结果,并写入可能失败的呼叫。

答案 2 :(得分:1)

您正在调用write错误。

如果您包含unistd.h,那么您将获得一个原型,编译器会纠正您。

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

此外,size_t的{​​{1}}参数需要printf,您应该检查错误。

答案 3 :(得分:1)

其他人已经说过它为什么不起作用

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

#include <unistd.h>

否则您在编辑过程中会收到警告。

答案 4 :(得分:0)

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