在文件的开头重写

时间:2015-05-20 06:26:02

标签: c linux gcc

我试图在文件开头重写文本但面对以下内容:

头文件是test.h:

#ifndef test_h

#define test_h

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char auth_xml_val[400];

void generate_auth_xml(FILE *);

#endif

源文件是test.c:

#include"test.h"

extern int count;

char auth_xml_val[] ="UEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUlubGxjeUkvUGp4QmRYUm9JSFZwWkQw";

void generate_auth_xml(FILE *fp)
{
    char *local= (char *)malloc(sizeof(char)*(strlen(auth_xml_val)+2));
// Removing last chars
    strcpy(local,auth_xml_val);
    local[strlen(auth_xml_val)-1] = '\0';

    //fprintf(fp,"%06d\n",1000);

    count++;
    fprintf(fp,"%s\n",local);       

    count++;
    fprintf(fp,"%s\n","empty");
    free(local);

    fseek(fp, 0L, SEEK_SET);
    fprintf(fp, "%d\n",count);
}

主文件是main.c:

#include"test.h"

int count = 0;

int main()
{

    FILE *fp_test;

    fp_test = fopen("adhaar_auth_xml_test.txt","w+");

    if(fp_test == NULL)
    {
        printf("cannot open file.\n");
        return 0;
    }

    generate_auth_xml(fp_test);

    fclose(fp_test);
    printf("Number of string count : %d\n",count);
    return 0;
}

make文件是:

all : test.o main.o run

run : test.o main.o
    $(CC) -g $^ -o $@

%.o : %.c
    ${CC} -g -c $< -o $@


.PHONY : clean

clean :
    -rm -f *.o run

预期出局是:

2

    UEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUlubGxjeUkvUGp4QmRYUm9JSFZwWkQ

empty

但它正在替换第一行的前几个字符。

2
    Q5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUlubGxjeUkvUGp4QmRYUm9JSFZwWkQ

empty

我哪里错了?

1 个答案:

答案 0 :(得分:2)

输出完全正常。

您希望可以在文件开头插入字符。这是不可能的。相反,你的程序只是覆盖文件的前2个字符,从而得到你得到的输出。