Pasing int таблицы с использованием функции записи

Пытаюсь отправить таблицу целых чисел в файл, но я получаю некоторые ошибки:

        fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
const int size = 20;
int *p = new int[size];
for(int i=0; i<size; i++) {
p[i] = i;
}
write (fd[0], p, sizeof(int)*size);
close(fd[0]);

После вызова этого кода в моем файле я вижу что-то вроде этого: \00\00\00\00\00\00\00,

0

Решение

Когда вы пишете данные в файлах, если вы хотите прочитать их в текстовом редакторе, вам нужно преобразовать переменные в строки (сериализация).

Для этого вы можете использовать fprintf а также fscanfили реализовать свои собственные функции синтаксического анализа, вам нужно только манипулировать строками.

Чтобы создать читаемый файл, ваш код может быть изменен в:

FILE *f = fopen(argv[1], "w"); // "a", "w" or what you want
const int size = 20;
int *p = new int[size];
for(int i=0; i<size; i++) {
p[i] = i;
fprintf(f, "%d ", p[i]);
}

fclose(f);

Чтобы прочитать файл, вы можете сделать:

FILE *f = fopen(argv[1], "r");
int nb = 0;
int tab[100]; // a buffer

while((1 == fscanf("%d ", &tab[nb])) && (nb < 100))
nb++;
1

Другие решения

Это запишет разделенные пробелом целые числа с завершающим пробелом. Вы действительно не сказали, какой формат вам нужен, кроме «текст».

    fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
if(fd[0] < 0) {
perror("open");
}
const int size = 20;
//int *p = new int[size];
for(int i=0; i<size; i++) {
char buf[20];
snprintf(buf, sizeof(buf), "%d ", i);
write(fd[0], buf, strlen(buf));
}
//write (fd[0], p, sizeof(int)*size);
close(fd[0]);
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector