Объяснение программы: Итак, у меня есть файл под названием «file.txt» и два указателя на один и тот же файл, f1 и f2.Проблемы с копированием строк при открытии файла
Я хочу, чтобы сделать некоторые изменения в file.txt
, когда флаг = 1, и другие изменения, когда флаг = 0.
Более специфический: (если флаг = 1, изменение диагонали матрицы со вторым столбцом, если флаг = 0 изменить диагональные значения матрицы со второй строкой).
Проблема: я получаю ошибки времени выполнения при копировании строки в этой строке: strcpy(ch_data_temp, ch_data1);
(ошибка говорит, что есть недопустимые значения в ch_data1
)
Как файл выглядит следующим образом:file.txt
001002003
004005006
007008009
Мой код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void func(FILE *f_1, FILE *f_2, int flag);
void main()
{
int flag = 1;
FILE *f1, *f2;
f1 = fopen("file.txt", "r+");
if (f1 == NULL)
printf("problem");
f2 = f1;
func(f1, f2, flag);
}
void func(FILE *f_1, FILE *f_2, int flag)
{
char ch_data_temp[4], ch_data1[4], ch_data2[4];
int i, d;
fseek(f_1, 0, SEEK_END);
d = ftell(f_1)/3;
d = sqrt(d);
fseek(f_1, 0, SEEK_SET);
if (flag == 1)
fseek(f_2, 3 * (d/2), SEEK_SET);
if (flag == 0)
fseek(f_2, 3 * d*(d/2), SEEK_SET);
for (i = 0; i<d; i++)
{
fgets(ch_data1, 4, f_1);
fgets(ch_data2, 4, f_2);
strcpy(ch_data_temp, ch_data1);
strcpy(ch_data1, ch_data2);
strcpy(ch_data2, ch_data_temp);
fseek(f_1, -3, SEEK_CUR);
fputs(ch_data1, f_1);
fseek(f_2, -3, SEEK_CUR);
fputs(ch_data2, f_2);
fseek(f_1, 3 * d, SEEK_CUR);
if (flag == 1)
fseek(f_2, 3 * (d - 1), SEEK_CUR);
if (flag == 0)
fseek(f_2, 0, SEEK_CUR);
}
}
Скопируйте точное сообщение об ошибке в ваш вопрос. –
'флаг' никогда не' 0'. И из-за 'f2 = f1;', в 'func()' нет разницы между 'f_1' и' f_2'. Вы открыли файл только один раз, и все, что вы используете на 'f_1', также происходит на' f_2', потому что это всего два имени для одного и того же объекта. – axiac
Пожалуйста, покажите нам [MCVE] (http://stackoverflow.com/help/mcve). –