Программирование на C: write () - PullRequest
0 голосов
/ 24 мая 2011

Мне нужно записать содержимое массива в файл. Давайте предположим, что я генерирую случайные числа и помещаю их в массив. Как мне скопировать эти значения в выходной файл?

[... previous code/declarations ...]

file = open(filename, O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU|S_IWGRP|S_IWOTH);
buffer = (double *) calloc(d, sizeof(double));
for (i = 0; i < d; i++)
{
    double div = (double) (RAND_MAX/0.333);
    double r = rand()/div;
    (*(buffer+i)) = r;
}
write(file, buffer, sizeof(double));

[ ... ]

Если я пытаюсь прочитать файлы, все, что я вижу, - это мусор памяти, бессмысленные символы по всему моему экрану. Может кто-нибудь помочь мне разобраться, что я делаю не так?

Ответы [ 4 ]

2 голосов
/ 24 мая 2011

Вызов write используется для записи блоков памяти в файл, который будет казаться в основном мусором, если вы попытаетесь просто вывести файл позже. Это потому, что они, скорее всего, будут двоичным представлением IEEE754.

Если вы хотите текстовое представление чисел, используйте что-то вроде:

fh = fopen (filename, "w");
for (i = 0; i < d; i++)
    fprintf (fh, "%f\n", buffer[i]);
fclose (fh);
1 голос
/ 24 мая 2011

Вы записываете случайные двоичные значения в файл. Когда вы читаете файл, вы видите случайные двоичные значения, интерпретируемые как символы. Где проблема?

0 голосов
/ 24 мая 2011

Почему вы положили

double div = (double) (RAND_MAX/0.333);

внутри цикла?

0 голосов
/ 24 мая 2011

По крайней мере, эта часть неверна:

write(file, buffer, sizeof(double));

Вы пишете только одно значение, а не весь массив.Умножьте размер на d (что соответствует количеству элементов в вашем массиве).

...