在linux中用C语言将随机数输出到文件
我正在尝试使用循环将一个数字(随机生成)写入一个文件,进行一定次数的迭代。我有:在linux中用C语言将随机数输出到文件,c,linux,file-io,systems-programming,C,Linux,File Io,Systems Programming,我正在尝试使用循环将一个数字(随机生成)写入一个文件,进行一定次数的迭代。我有: while (i++ < number) { n = randno(); write(openFd, (char) n, sizeof(int)); } while(i++
while (i++ < number) {
n = randno();
write(openFd, (char) n, sizeof(int));
}
while(i++
代码编译并运行。我可以在屏幕上打印“n”,文件已打开(代码未显示),但当我尝试使用gedit
打开文件时,文件中似乎没有任何数据。我想要一个有一定长度的一个非常大的数字的文件。我哪里做错了?感谢您的帮助
顺便问一下,什么是真正的随机函数?谢谢。write()的原型是:
ssize_t write(int fd, const void *buf, size_t count);
请注意,第二个arg是一个指针值,因此在那里传递一个随机数(这是您所做的1)并没有seg fault,这有点令人惊讶
无论如何,如果您要做的是将数字写入文本,则需要先将其放入字符串中:
int n = randno();
char buffer[16]; // Will hold any int value + `\0`
sprintf(buffer, "%d", n);
您现在可以将缓冲区
与写入
一起使用:
write(openFd, buffer, strlen(buffer));
一,
n
是int;用(char)
强制转换只会截断它。也许你指的是(char*)&n
,它可以写出数字,但是是二进制的,而不是文本!我想这不是您想要的,因为您在gedit中检查文件。write()的原型是:
ssize_t write(int fd, const void *buf, size_t count);
请注意,第二个arg是一个指针值,因此在那里传递一个随机数(这是您所做的1)并没有seg fault,这有点令人惊讶
无论如何,如果您要做的是将数字写入文本,则需要先将其放入字符串中:
int n = randno();
char buffer[16]; // Will hold any int value + `\0`
sprintf(buffer, "%d", n);
您现在可以将缓冲区
与写入
一起使用:
write(openFd, buffer, strlen(buffer));
一,
n
是一个整数;用(char)
强制转换只会截断它。也许你指的是(char*)&n
,它可以写出数字,但是是二进制的,而不是文本!我想这不是您想要的,因为您在gedit中检查文件。如果您有文件,也可以使用fprintf*
fprintf(fp, "%d",n);
如果有文件,也可以使用fprintf*
fprintf(fp, "%d",n);
通过将n强制转换为字符类型,您已经创建了一些内容,这些内容将随机写入指向0到255之间的数字的内存。扩展你正在做的事情,你所需要的就是
while (i++ < number) {
int n;
n = randno();
write(openFd, &n, sizeof(int));
}
while(i++
运算符将传递一个指向N的指针,而不是N值…方法是将N强制转换为您创建的字符类型,该字符类型将随机写入指向0到255之间的数字的内存。扩展你正在做的事情,你所需要的就是
while (i++ < number) {
int n;
n = randno();
write(openFd, &n, sizeof(int));
}
while(i++
&运算符将传递指向N的指针,而不是N值…真正的随机函数是输出不可计算的真实随机数的函数 /linux上的dev/random,而不是/dev/urandom
对于您的文件写入,我将使用“fprintf”真正的随机函数是输出不可计算的真实随机数的函数 /linux上的dev/random,而不是/dev/urandom
对于您的文件写入,我将使用“fprintf”您的数字必须是多随机?为什么不使用真正的随机函数来实现它呢?您可以简单地将一个数字
n
转换为一个字符。你在课堂上睡觉吗?你能检查一下write()
函数的返回状态吗。成功时,它应返回写入文件的字节数。这将确认写入文件的内容。这是用C/C++编写的,对吗?你能把这个细节添加到你的Q中让它更明显吗?同时添加适当的标签。这应该是如此,imho。你的数字必须是随机的吗?为什么不使用真正的随机函数来实现它呢?您可以简单地将一个数字n
转换为一个字符。你在课堂上睡觉吗?你能检查一下write()
函数的返回状态吗。成功时,它应返回写入文件的字节数。这将确认写入文件的内容。这是用C/C++编写的,对吗?你能把这个细节添加到你的Q中让它更明显吗?同时添加适当的标签。这应该转到SO,imho。