无法使用 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*
此外,printf
的 size_t
个参数需要 "%zu"
,您应该检查错误。
别人已经说了为什么不行
我只想补充一点,你也应该写:
#include <unistd.h>
否则你会在编译过程中收到警告。
write() 函数不将 int 作为第二个参数,而是将缓冲区上的指针 (void *) 及其长度作为第二个参数。这意味着您必须先将 int 转换为缓冲区中的字符串(例如使用 sprintf()),然后将缓冲区输出到文件(使用 write())
为了将一些随机字符写入文本文件,我编写了以下代码:
#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*
此外,printf
的 size_t
个参数需要 "%zu"
,您应该检查错误。
别人已经说了为什么不行
我只想补充一点,你也应该写:
#include <unistd.h>
否则你会在编译过程中收到警告。
write() 函数不将 int 作为第二个参数,而是将缓冲区上的指针 (void *) 及其长度作为第二个参数。这意味着您必须先将 int 转换为缓冲区中的字符串(例如使用 sprintf()),然后将缓冲区输出到文件(使用 write())