重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,指针默认只有一个地址的长度的空间,存不了那么多的字符。
创新互联公司长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为蒲江县企业提供专业的成都网站制作、成都做网站,蒲江县网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
其次,传值和传地址一塌糊涂,完全就是乱写么。
scanf的第二个参数是地址,如果本身不是指针则需要取址符。
我给你重写了算了
#includestdio.h
int Retrieve(int array[],int length,int x);/*形参x直接传值就可以了*/
int main()
{
int *a,x;
int length,i;
scanf("%d",length);
a = (int)malloc(sizeof(int)*length); /*申请一个内存空间用来存放数据,或者直接用一个大数组也可以*/
代码文本:
#include "stdio.h"
#include string.h
struct STU{
char nm[21],id[12];
int s[5];
};
int main(int argc,char *argv[]){
struct STU stu;
char ts[21];
FILE *fp;
if(fp=fopen("stu.dat","r")){
printf("Please enter a name or ID...\n");
scanf("%20s",ts);
printf("\nTo find the result is:\n");
while(fscanf(fp,"%s%s%d%d%d%d%d",stu.nm,stu.id,stu.s,stu.s+1,stu.s+2,stu.s+3,stu.s+4)!=EOF)
if(strcmp(ts,stu.nm)==0 || strcmp(ts,stu.id)==0){
printf(" %s\t%s%4d%4d%4d%4d%4d\n",stu.nm,stu.id,stu.s[0],stu.s[1],stu.s[2],stu.s[3],stu.s[4]);
fclose(fp);
return 0;
}
printf("Not find...\n");
fclose(fp);
}
else
printf("Open the file failure, exit...\n");
return 0;
}
这里的记录一般说的是结构体,即保存了一组信息。
将结构体写入文件可使用fwrite函数,原型:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);参数含义:
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
返回值:
实际写入的数据项个数count。
注:文件需用二进制写的方式打开,即:
fout = fopen("file address", "wb"); 从文件中读取结构体信息,可使用fread函数,原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;参数含义:
(1)buffer:用于接收数据的内存地址
(2)size:要读的每个数据项的字节数,单位是字节
(3)count:要读count个数据项,每个数据项size个字节.
(4)stream:输入流
返回值:
实际读取的元素个数。
注:文件需用二进制读的方式打开,即:
fin = fopen("file address", "rb"); fwrite和fread都是单纯的写、读二进制数据,所以需要配合使用,以保证数据有效。用fwrite产生文件,之后配套的用fread来读取文件。