0
程序说明:所以我得到了一个名为“file.txt”的文件,并且两个指针指向同一个文件f1和f2。复制字符串时出现问题,打开文件时
我想要做一些改变file.txt
当标志= 1,并且当标志的其他变化= 0
更多specificly:(如果标志= 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);
}
}
复制确切的错误信息到你的问题。 –
'flag'永远不是'0'。由于'f2 = f1;',在'func()'中'f_1'和'f_2'之间没有区别。您只打开了一次文件,而在'f_1'上操作的任何内容也都发生在'f_2'上,因为它们只是同一个对象的两个名称。 – axiac
请向我们展示一个[MCVE](http://stackoverflow.com/help/mcve)。 –