所以我有這樣的代碼傳遞給函數時文件指針的行爲有所不同。爲什麼?
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__元素的聲明。 –