首先,指針默認(rèn)只有一個(gè)地址的長(zhǎng)度的空間,存不了那么多的字符。
創(chuàng)新互聯(lián)公司長(zhǎng)期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蒲江縣企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,蒲江縣網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
其次,傳值和傳地址一塌糊涂,完全就是亂寫么。
scanf的第二個(gè)參數(shù)是地址,如果本身不是指針則需要取址符。
我給你重寫了算了
#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); /*申請(qǐng)一個(gè)內(nèi)存空間用來存放數(shù)據(jù),或者直接用一個(gè)大數(shù)組也可以*/
代碼文本:
#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;
}
這里的記錄一般說的是結(jié)構(gòu)體,即保存了一組信息。
將結(jié)構(gòu)體寫入文件可使用fwrite函數(shù),原型:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);參數(shù)含義:
(1)buffer:是一個(gè)指針,對(duì)fwrite來說,是要獲取數(shù)據(jù)的地址;
(2)size:要寫入內(nèi)容的單字節(jié)數(shù);
(3)count:要進(jìn)行寫入size字節(jié)的數(shù)據(jù)項(xiàng)的個(gè)數(shù);
(4)stream:目標(biāo)文件指針;
返回值:
實(shí)際寫入的數(shù)據(jù)項(xiàng)個(gè)數(shù)count。
注:文件需用二進(jìn)制寫的方式打開,即:
fout = fopen("file address", "wb"); 從文件中讀取結(jié)構(gòu)體信息,可使用fread函數(shù),原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;參數(shù)含義:
(1)buffer:用于接收數(shù)據(jù)的內(nèi)存地址
(2)size:要讀的每個(gè)數(shù)據(jù)項(xiàng)的字節(jié)數(shù),單位是字節(jié)
(3)count:要讀count個(gè)數(shù)據(jù)項(xiàng),每個(gè)數(shù)據(jù)項(xiàng)size個(gè)字節(jié).
(4)stream:輸入流
返回值:
實(shí)際讀取的元素個(gè)數(shù)。
注:文件需用二進(jìn)制讀的方式打開,即:
fin = fopen("file address", "rb"); fwrite和fread都是單純的寫、讀二進(jìn)制數(shù)據(jù),所以需要配合使用,以保證數(shù)據(jù)有效。用fwrite產(chǎn)生文件,之后配套的用fread來讀取文件。