我试图在文件开头重写文本但面对以下内容:
头文件是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
我哪里错了?
答案 0 :(得分:2)
输出完全正常。
您希望可以在文件开头插入字符。这是不可能的。相反,你的程序只是覆盖文件的前2个字符,从而得到你得到的输出。