Итак, у меня есть это задание: взять содержимое одного текстового файла и скопировать его в другой. Мы должны переписать функцию по умолчанию strncpy, но немного по-другому. Вот то, что в лабораторных условиях написано в явном виде:
Эта функция заменяет функцию std :: strncpy. То есть он копирует содержимое s2 в s1, но не более чем на N символов. Подсказка: поскольку strlength (и std :: strlen) не считает символ с нулем в конце, не забудьте добавить это число на единицу при вызове strncopy (и std :: strncpy). Чтобы избежать нарушения сегментации, вы должны проверить, встречался ли завершающий нулем символ, прежде чем разыменовывать s2, чтобы скопировать данные в s1. Опять же, основывайте ваш код на указателе l oop.
Вот что у меня есть для моей функции:
void strncopy(char *s1, const char *s2, int N){
// return if no memory is allocated to the s1
if (s1 == NULL)
NULL;
// take a pointer pointing to the beginning of s1 string
char *ptr = s1;
// copy the C-string pointed by s2 into the array
// pointed by s1
while (*s2 != '\0'){
if (*s1 == N){
break;
}
// *s1 = *s2;
s1++;
s2++;
}
// include the terminating null character
*s1 = '\0';
}
Проблема в том, что она кажется Если l oop не останавливается при достижении количества символов N.
Вот фрагмент моей основной функции, реализующей эту функцию:
int main(int argc, char *argv[]) {
// check for four command line arguments
// if not, print error message and bail out
if (argc != 4){
cerr<<"Error";
return -1;;
}
// declare two streams: file1, file2
fstream file1;
fstream file2;
// declare two char text line arrays
char textline1[256];
char textline2[256];
if (strcompare(argv[1], "-copy") == 0) {
//open file1 for reading
file1.open(argv[2]);
//open file2 for writing
file2.open(argv[3]);
//read text line 1 frome file1
while (file1.getline(textline1, 256)) {
// determine length of textline1
char t1 = strlength(textline1);
// copy textline1 to textline2
strncopy(textline2, textline1, (t1+1));
// write textline2 + newline to file2
file2 << textline2 << '\n';
}
}
Вот текст в файле Я пытаюсь скопировать:
Журнал капитана, стандарт 3192.1. Предприятие находится на пути к звездному скоплению NG C 321. Цель - открыть дипломатические отношения c с известными там цивилизациями. Мы отправили сообщение Эминиару Седьмому, главному звену звездного скопления anet, сообщив им о наших дружественных намерениях. Мы ждем ответа.
И вот что я на самом деле копирую:
Журнал капитана, стандарт 3192.1. Предприятие находится на пути к звездному скоплению NG C 321. Цель - открыть дипломатические отношения c с известными там цивилизациями. Мы отправили сообщение Эминиару Седьмому, главному руководству звездного скопления anet, сообщив им о наших дружественных намерениях. Мы ждем ответа. n answer.cluster,.
Кто-нибудь знает, в чем моя проблема? Мне жаль, что это глупый вопрос, но с тех пор, как занятия пошли только в онлайн, получить помощь от инструктора и ТА очень сложно.