Предполагалось создать программу, которая считывает первые 100 символов source.txt, записывает их в файл destination1.txt и заменяет все «2» на «S» и записывает их в пункт назначения2 .текст. Ниже мой кодLinux File Read and Write - C++ [Обновлено]
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <cstdio>
#include <iostream>
using namespace std;
int main(int argc, const char* argv[]){
argv[0] = "source.txt";
argv[1] = "destination1.txt";
argv[2] = "destination2.txt";
int count=100;
char buff[125];
int fid1 = open(argv[0],O_RDWR);
read(fid1,buff,count);
close(fid1);
int fid2 = open(argv[1],O_RDWR);
write(fid2,buff,count);
close(fid2);
//How to change the characters?
return 0;
}
Спасибо, ребята, я могу сделать копирование. Но как выполнить замену персонажа? Если это fstream
Я знаю, как это сделать с циклом for. Но я должен использовать системные вызовы Linux.
строковые литералы имеют тип 'сопзЬ полукокса []', так что вы должны относиться к ним с 'сопзЬ полукокса * 'для предотвращения случайной модификации. Разрешение 'char *' ссылаться на строковые литералы - это просто для обратной совместимости с C, и его следует избегать. Во-вторых, как вы знаете, что 'argv' содержит как минимум 3 элемента? Ответ: нет. Объявите свои собственные указатели или хранилище для этих строк. –
Количество ошибок в этом коде несколько. 'read (fid1, buff, count);' где 'count' равно 100, а' buff' - всего ** 20 ** символов. Если вы не видите, что это проблема, вам нужно просмотреть, как работают функции библиотеки, которые вы вызываете. – WhozCraig
Назначение 'argv' - неопределенное поведение, поскольку ОС принадлежит переменным и может не дать вам полный массив. –