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)。 –