C语言 有问题,复制字符串,打开文件时



程序说明:所以我得到了一个名为"file.txt"的文件,以及指向同一个文件的两个指针,f1和f2。

我想在flag = 1时对file.txt进行一些更改,在flag = 0时进行其他更改。

更具体地说:(如果flag=1,改变矩阵的第二列对角线值,如果flag=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);
    }
}

当您执行f_1 = f_2时,由于f_1也是FILE*f_2,它们将以相同的方式受到影响,因为它是相同的指针。当您在f_2上使用fseek()时,它与在f_1上使用它完全相同,反之亦然。问题是你不知道你在读什么,然后你不能确定ch_data1里面有什么。

同理,执行fgets(ch_data2, 4, f_2);与执行fgets(ch_data2, 4, f_1);完全相同

相关内容

  • 没有找到相关文章

最新更新