【发布时间】:2015-05-13 11:19:48
【问题描述】:
所以我有这个代码
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;
}
而且输出很明显。
7
8
9
7
但文件指针的工作方式不同。我正在尝试编写用于将数据附加到文件中的基本代码。
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);ingetdata应该是fgetc(ch,fp),对吧?顺便说一句,ch的类型应该是int,而不是char。 -
@CoolGuy 问题是,我没有看到 prints all 元素的声明。
-
@SouravGhosh,对。没注意。
-
它们的工作原理完全相同——第一个函数修改
q指向的东西,第二个函数修改fp指向的东西。