c语言 文件指针的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 19:10:01
为什么得不到正确的输出?
#include<stdio.h>
#include<stdlib.h>
struct pass{
char hh[10];
};
int main(){
FILE *fp;
struct pass ch,ah;
fp=fopen("pass.dat","w");
printf("pass:");
scanf("%s",&ch);
fwrite(&ch,sizeof(struct pass),1,fp);
fread(&ch,sizeof(struct pass),1,fp);
printf("%s",ch);
return 0;
}

首先,你的fp文件是以“W”写的方式打开的,所以你的fread一定读不出东西来。

另外,scanf()中,ch本身已经是一个指针,是一个地址,这里不需要加上&地址符。

第三, 定义函数
size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明
fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

注意这里定义中,nmemb的含义

也请参照fread的定义:

定义函数
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明
fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。
返回值
返回实际读取到的nmemb数目。