我编写了以下代码,以便将一些随机字符写入文本文件:
#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);
}
我找了一些解决方案来做到这一点
也许这里有人知道我该如何解决这个问题?
答案 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())