所以我有这样的代码传递给函数时文件指针的行为有所不同。为什么?
void getdata(int *q)
{
for(int i=0;i<3;++i)
scanf("%d",q++);
*q=10;
}
int main()
{
int *p,a[4];
p=a;
getdata(p);
printf("%d",*p);
return 0;
}
和输出是显而易见的。
但文件指针不以相同的方式工作。我试图编写一个将数据附加到文件中的基本代码。
void getdata(FILE *fp)
{
char ch;
while((ch=getchar())!=EOF)
fputc(ch,fp);
rewind(fp);
}
void printdata(FILE *fp)
{
char ch;
while((ch=fgetc(fp))!=EOF)
putc(ch,stdout);
}
int main()
{
FILE *fp1;
fp1=fopen("music.txt","w+");
getdata(fp1);
printf("Text is::\n");
printdata(fp1);
fp1=fopen("music.txt","a+");
printf("\nEnter some more text::\n");
getdata(fp1);
printf("\nAfter appending text is::\n");
printdata(fp1);
return 0;
}
此代码正常工作。但如果rewind(fp);
被删除,它的行为很奇怪。为什么我需要倒带指针?虽然指向同一个文件的函数不是fp1
和fp
,所以不应该像第一个程序中那样影响对方?
'fputc','putc'和'rewind'改变指针指向的io对象。因此,指针是本地的并不重要。 –
'fputc(ch,fp);'''getdata''应该是'fgetc(ch,fp)',对不对?顺便说一句,'ch'应该是'int'类型,而不是'char'。 –
@CoolGuy问题是,我没有看到_prints_ __all__元素的声明。 –