gets函數(shù)的參數(shù)(函數(shù)f(x)=x)
夕逆IT
- 前端設(shè)計(jì)
- 2023-09-14
- 62

大家好,今天來(lái)為大家解答gets函數(shù)的參數(shù)這個(gè)問(wèn)題的一些問(wèn)題點(diǎn),包括函數(shù)f(x也一樣很多人還不知道,因此呢,今天就來(lái)為大家分析分析,現(xiàn)在讓我們一起來(lái)看看吧!如果解決了您...
大家好,今天來(lái)為大家解答gets函數(shù)的參數(shù)這個(gè)問(wèn)題的一些問(wèn)題點(diǎn),包括函數(shù)f(x也一樣很多人還不知道,因此呢,今天就來(lái)為大家分析分析,現(xiàn)在讓我們一起來(lái)看看吧!如果解決了您的問(wèn)題,還望您關(guān)注下本站哦,謝謝~
fgets的返回值是什么
如果成功,該函數(shù)返回相同的str參數(shù)。
fgets函數(shù)返回值
1.fgets函數(shù)的返回值是一個(gè)指向字符串的指針。2.這是因?yàn)閒gets函數(shù)用于從文件中讀取一行字符串,并將其存儲(chǔ)到指定的緩沖區(qū)中。返回的指針指向存儲(chǔ)的字符串,如果讀取成功,則返回指向緩沖區(qū)的指針;如果讀取失敗或到達(dá)文件末尾,則返回NULL。3.fgets函數(shù)的返回值可以用于判斷讀取是否成功,以及進(jìn)一步對(duì)讀取的字符串進(jìn)行處理或操作。可以通過(guò)判斷返回值是否為NULL來(lái)確定是否讀取到了文件末尾或發(fā)生了讀取錯(cuò)誤。
C語(yǔ)言讀取文件中的數(shù)據(jù)
讀寫文件在編程里面應(yīng)該是用的最多也最基礎(chǔ)的工作了。但是,C語(yǔ)言中,文件讀寫方法有很多種,各種方法的使用場(chǎng)景區(qū)別甚大,到底日常工作中,我們什么時(shí)候該用哪種方法呢?還是說(shuō)隨便抓一種用就可以?
這里就給大家分享一下C語(yǔ)言文件的各種方法:
在window環(huán)境下,文件分別兩種,一種為文本文件(用記事本可以打開(kāi)的文件,如txt、xml、html、js等),一種為二進(jìn)制文件(如圖片、軟件、壓縮包等)
讀寫文本文件
首先創(chuàng)建一個(gè)File對(duì)象,這個(gè)利用到系統(tǒng)庫(kù)中的fopen()函數(shù),該函數(shù)返回一個(gè)File*類型的對(duì)象。
FILE*fopen(constchar*filename,constchar*mode);
第一個(gè)參數(shù)為:文件路徑;第二個(gè)參數(shù)為打開(kāi)模式:這個(gè)是固定的,具體是什么意思大家可以自己去查一下,沒(méi)什么特別的,記住就好了。
1、文本文件讀寫
接下來(lái)我們讀寫一個(gè)文本文件,我新建一個(gè)test.txt文件并且讀取出內(nèi)容寫進(jìn)newtest.txt文件中,這里有兩組函數(shù)fgetc/fputc和fgets/fputs函數(shù),故名意意,fgetc是讀取出一個(gè)字符,而fgets是讀取一段字符串,fputc是讀寫入一個(gè)字符,fputs寫進(jìn)一段字符串。我們分別來(lái)看一下:
intmain(){ FILE*fpr=fopen("test.txt","r"); FILE*fpw=fopen("newtest.txt","w"); if(fpr&&fpw) { while(!feof(fpr)) { charc=(char)fgetc(fpr); cout<<c; fputc(c,fpw); } } fclose(fpr); fclose(fpw); system("pause"); return0;}
注意:
1、feof是判斷是否讀取到文件尾的函數(shù),此處不用EOF來(lái)作為讀寫結(jié)束條件是因?yàn)椋汉瘮?shù)如fgetc或getc返回EOF并不一定表示文件結(jié)束,當(dāng)讀取文件出錯(cuò)時(shí)也會(huì)返回EOF,僅憑返回-1就認(rèn)為文件結(jié)束是錯(cuò)誤的;正因?yàn)槿绱?,我們需要feof()來(lái)判斷文件是否結(jié)束,當(dāng)然用feof()來(lái)判斷文件結(jié)束時(shí)也需要判斷讀取操作是否出錯(cuò),這時(shí)可以用ferror()來(lái)判斷,當(dāng)其為真時(shí)表示有錯(cuò)誤發(fā)生。在實(shí)際的程序中,應(yīng)該每執(zhí)行一次文件操作,就用用ferror函數(shù)檢測(cè)是否出錯(cuò)。
2、fgetc()返回的是int,如果要在屏幕上打印出字符的話需要轉(zhuǎn)換為char;
上面是一個(gè)字符一個(gè)字符的讀,下面一段一段的讀:
FILE*fpr=fopen("test.txt","r");FILE*fpw=fopen("newtest.txt","w");if(fpr&&fpw){ while(!feof(fpr)) { char*buff=newchar[1024]; char*s=fgets(buff,3,fpr); cout<<s; fputs(s,fpw); }}fclose(fpr);fclose(fpw);
這個(gè)方法個(gè)人不是很推薦,因?yàn)樵谑褂眠^(guò)程中經(jīng)常會(huì)報(bào)錯(cuò),這里我如果將以此讀取的字符串長(zhǎng)度由3改為2或者1就會(huì)報(bào)錯(cuò),這個(gè)我也搞不清為什么,如果有知道的朋友可以評(píng)論幫我解答一下;
讀寫二進(jìn)制文件
C語(yǔ)言讀寫二進(jìn)制文件通過(guò)庫(kù)函數(shù)fread和fwrite實(shí)現(xiàn):
size_tfread(void*buff,size_tsizeofElement,size_tcount,FILE*stream);
size_tfwrite(constvoid*ptr,size_tsizeofElement,size_tcount,FILE*stream);
參數(shù)解釋:buff:緩存區(qū)地址
sizeofElement:每次讀/寫的數(shù)據(jù)大小
count:要多去多個(gè)個(gè)sizeofElement大小的數(shù)據(jù)
stream:文件指針
現(xiàn)在我們來(lái)讀一張神仙姐姐的圖片test.ipg并且將讀取到的內(nèi)容寫進(jìn)newtest.jpg,然后查看是否能打開(kāi)。
intmain(){FILE*fpr=fopen("test.jpg","rb");FILE*fpw=fopen("newtest.jpg","wb");char*buff=newchar[50];intlen=50;while(len==50){len=fread(buff,sizeof(char),50,fpr);fwrite(buff,sizeof(char),len,fpw);}fclose(fpr);fclose(fpw);system("pause");return0;}
運(yùn)行結(jié)果,打開(kāi)newtest.jpg,結(jié)果完美呈現(xiàn)神仙姐姐。
注意以下幾點(diǎn):
1、文件打開(kāi)方式,不管是讀還是寫都需要在后面加b,b就是binary二進(jìn)制的意思,所以這里打開(kāi)方式是“日本”和“wb”;
2、寫入fwrite中的count一定要注意,你的緩存區(qū)存了多大的內(nèi)容這里就寫多大的內(nèi)容,不然會(huì)導(dǎo)致文件損壞,因?yàn)槲叶ǖ氖敲看巫x取50個(gè)char大小的內(nèi)容,但是文件大小不可能是50的整數(shù)啊,最后一次讀取的話他肯定會(huì)小于50,并且大小不能超過(guò)緩存區(qū)的大?。?/p>
文件內(nèi)部位置指針
在打開(kāi)任何文件的時(shí)候,都會(huì)有一個(gè)文件內(nèi)部位置指針。為什么要在這里介紹這個(gè)呢?我們大部分讀取文件的時(shí)候都是不用去管他的,因?yàn)槲覀兓竞苌儆凶x取固定位置開(kāi)始固定長(zhǎng)度的需求,都是從開(kāi)始一直讀取到文件結(jié)束。
其實(shí)我們上面用到的那么多函數(shù),位置指針在文件被打開(kāi)的時(shí)候位置指針是在零為,每讀取一次這個(gè)指針就會(huì)往后面移動(dòng)你讀取的數(shù)據(jù)兩個(gè)距離。
這里有三個(gè)函數(shù):
1、intfseek(FILE*stream,longintoffset,intwhere)這個(gè)函數(shù)的作用是將文件位置指針從指定位置(where:系統(tǒng)有定義三個(gè)宏SEEK_SET:文件頭、SEEK_CUR當(dāng)前指針位置、SEEK_END文件尾,當(dāng)然你也可以自己指定位置,比如100、50這樣)移動(dòng)個(gè)offset個(gè)位置(正數(shù)往后移,負(fù)數(shù)往前移);
2、voidrewind(FILE*stream)這個(gè)很簡(jiǎn)單,將位置指針指向文件開(kāi)頭;
3、longintftell(FILE*stream)這個(gè)也很簡(jiǎn)答,告訴你當(dāng)前位置指針的位置(相對(duì)于文件頭);
這可以干嘛呢?最實(shí)用的,當(dāng)然是快速的獲取文件長(zhǎng)度?。?/p>
我們只需要用fseek將指針移動(dòng)到文件尾,再用ftell求出當(dāng)前指針位置就是了:
fseek(fpr,OL,SEEK_END);注意這里的offset一定要給0
ftell(fpr);
getchar和gets區(qū)別
.getchar意思:獲取字符
gets意思:得到;獲?。皇盏?;接到;gets是get的第三人稱單數(shù)
只從表面上兩者之間讀音不同,意思不同
2.在C語(yǔ)言gets和getchar區(qū)別
gets()函數(shù)用于輸入字符串,可以接收空格,遇到回車認(rèn)為輸入結(jié)束;
getchar()函數(shù)可以接受空格,回車等字符
c語(yǔ)言中的函數(shù)都有哪些,都是如何寫的
C語(yǔ)言輸入輸出函數(shù)有很多,標(biāo)準(zhǔn)I/O函數(shù)中包含了如下幾個(gè)常用的函數(shù):
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
intgetc(FILE*fp)
getc主要是從文件中讀出一個(gè)字符.常用的判斷文件是否讀取結(jié)束的語(yǔ)句為(ch=getc(fp))!=EOF.EOF為文件結(jié)束標(biāo)志,定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當(dāng)fp為stdin時(shí),getc(stdin)就等同于getchar()了.
intputc(intch,FILE*fp)
putc主要是把字符ch寫到文件fp中去.如果fp為stdout,則putc就等同于putchar()了.
intgetchar(void)
getchar主要是從標(biāo)準(zhǔn)輸入流讀取一個(gè)字符.默認(rèn)的標(biāo)準(zhǔn)輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字符時(shí)又涉及到緩沖的問(wèn)題,所以并不是在屏幕中敲上一個(gè)字符程序就會(huì)運(yùn)行,一般是通過(guò)在屏幕上敲上回車鍵,然后將回車前的字符串放在緩沖區(qū)中,getchar就是在緩沖區(qū)中一個(gè)一個(gè)的讀字符.當(dāng)然也可以在while循環(huán)中指定終止字符,如下面的語(yǔ)句:while((c=getchar())!='#')這是以#來(lái)結(jié)束的.
intputchar(intch)
putchar(ch)主要是把字符ch寫到標(biāo)準(zhǔn)流stdout中去.
char*gets(char*str)
gets主要是從標(biāo)準(zhǔn)輸入流讀取字符串并回顯,讀到換行符時(shí)退出,并會(huì)將換行符省去.
intputs(char*str)
puts主要是把字符串str寫到標(biāo)準(zhǔn)流stdout中去,并會(huì)在輸出到最后時(shí)添加一個(gè)換行符.
char*fgets(char*str,intnum,FILE*fp)
str是存放讀入的字符數(shù)組指針,num是最大允許的讀入字符數(shù),fp是文件指針.fgets的功能是讀一行字符,該行的字符數(shù)不大于num-1.因?yàn)閒gets函數(shù)會(huì)在末尾加上一個(gè)空字符以構(gòu)成一個(gè)字符串.另外fgets在讀取到換行符后不會(huì)將其省略.
intfputs(char*str,file*fp)
fputs將str寫入fp.fputs與puts的不同之處是fputs在打印時(shí)并不添加換行符.
intfgetc(FILE*fp)
fgetc從fp的當(dāng)前位置讀取一個(gè)字符.
intfputc(intch,file*fp)
fputc是將ch寫入fp當(dāng)前指定位置.
intfscanf(FILE*fp,char*format,輸入列表)
fscanf按照指定格式從文件中出讀出數(shù)據(jù),并賦值到參數(shù)列表中.
intfprintf(FILE*fp,char*format,輸出列表)
fprintf將格式化數(shù)據(jù)寫入流式文件中.
數(shù)據(jù)塊讀寫函數(shù)
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
參數(shù)說(shuō)明:
buffer:是一個(gè)指針。
對(duì)fread來(lái)說(shuō),它是讀入數(shù)據(jù)的存放地址。
對(duì)fwrite來(lái)說(shuō),是要輸出數(shù)據(jù)的地址(均指起始地址)。
size:要讀寫的字節(jié)數(shù)。
count:要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。
fp:文件型指針。
c語(yǔ)言九大函數(shù)
一、printf函數(shù)
1、函數(shù)原型:intprintf(constchar*format,[argument]);2、功能:實(shí)現(xiàn)格式化輸入輸出。3、返回值:實(shí)際輸出的字符個(gè)數(shù)。4、函數(shù)參數(shù):format格式化字符串,argument要輸出的參數(shù)。
二、fprintf函數(shù)
1、函數(shù)原型:intfprintf(FILE*stream,constchar*format,[argument])。2、功能:將按照格式化字符串格式化后的數(shù)據(jù)輸出到文件流stream中。3、返回值:實(shí)際寫入到文件的字符個(gè)數(shù)。4、函數(shù)參數(shù):stream要輸出的文件流指針、format格式化字符串、argument要輸出的參數(shù)。
三、sprintf函數(shù)1、函數(shù)原型:intsprintf(char*buffer,constchar*format,[argument])。2、功能:將按照格式化字符串格式化后的數(shù)據(jù)輸出到字符串buffer中。3、返回值:實(shí)際輸出到字符串buffer的字符個(gè)數(shù)。4、函數(shù)參數(shù):buffer要輸出的字符串指針、format格式化字符串、argument要輸出的參數(shù)。
四、scanf函數(shù)1、函數(shù)原型:intscanf(char*format[,argument,…])。2、功能:從標(biāo)準(zhǔn)輸入設(shè)備(一般指鍵盤)實(shí)現(xiàn)格式化輸入。3、返回值:成功返回讀入的數(shù)據(jù)項(xiàng)個(gè)數(shù)。4、函數(shù)參數(shù):format格式化字符串,argument輸入數(shù)據(jù)項(xiàng)的地址列表,常用格式類型參考printf函數(shù)的個(gè)格式類型。
五、sscanf函數(shù)1、函數(shù)原型:intsscanf(constchar*buffer,char*format[,argument,…])。2、功能:讀取格式化字符串中的位置。3、返回值:成功返回讀入的數(shù)據(jù)項(xiàng)個(gè)數(shù)。4、函數(shù)參數(shù):buffer要讀取的格式化字符串、format格式化字符串、argument輸入數(shù)據(jù)項(xiàng)的地址列表。
六、getchar函數(shù)1、函數(shù)原型:intgetchar(void)。2、功能:getchar函數(shù)的功能是從標(biāo)準(zhǔn)輸入設(shè)備讀取下一個(gè)字符,包括回車換行符都能讀取。3、返回值:成功返回用戶輸入字符對(duì)應(yīng)的ASCII碼,失敗返回-1。4、函數(shù)參數(shù):無(wú)。
七、fgets函數(shù)1、函數(shù)原型:char*fgets(char*buf,intbufsize,FILE*stream);2、功能:從文件流stream中讀取數(shù)據(jù),每次讀取一行。讀取的數(shù)據(jù)保存在buf指向的字符數(shù)組中。2、返回值:函數(shù)執(zhí)行成功返回buf、失敗或讀到文件結(jié)尾返回NULL。3、函數(shù)參數(shù):buf,字符指針,用來(lái)存取所讀取的數(shù)據(jù);bufsize,整數(shù),buf緩沖區(qū)的大小;stream,FILE指針,表示將要讀取的文件流。
8、memset函數(shù)1、函數(shù)原型:void*memset(void*buffer,intch,size_tcount)。2、功能:將buffer中當(dāng)前位置后面的count個(gè)字節(jié)用ch替換。3、返回值:返回buffer。4、函數(shù)參數(shù):buffer指針或數(shù)組,內(nèi)存緩沖區(qū)的首地址,ch賦給buffer的值,countbuffer的長(zhǎng)度。
九、memcpy函數(shù)1、函數(shù)原型:void*memcpy(void*dest,constvoid*src,size_tn)。2、功能:由src指向地址為起始地址的連續(xù)n個(gè)字節(jié)的數(shù)據(jù)復(fù)制到以dest指向地址為起始地址的空間內(nèi)。3、返回值:函數(shù)返回一個(gè)指向dest的指針。4、函數(shù)參數(shù):dest目標(biāo)數(shù)據(jù)緩沖區(qū)起始地址,src源數(shù)據(jù)緩沖區(qū)起始地址,n要復(fù)制的字節(jié)數(shù)。
好了,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!
本文鏈接:http://xinin56.com/qianduan/23117.html