国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言中庫函數調用幾例

2019-11-17 05:06:08
字體:
來源:轉載
供稿:網友
作者在使用C語言編程實踐過程中發現,盡管所編程序從語法上看正確的,能夠調試通過,但實際執行結果卻達不到程序編制的目的。現舉幾例說明如下,希望能起到幫助C語言初學者少走彎路的作用。

  一.調用unlink失敗的原因及解決方法

  unlink的原型在”io.h”中,其調用方法為unlink(filename,功能為刪除由filename指定的文件.一般調用方法如例1所示。

  例1.刪除某一目錄下符合給定條件的文件

    1 #include<dir.h>

    2 void main(int argc,char *argv[])

    3 {int done;

    4 strUCt ffblk f;

    5 if(argc!=2) exit(0);

    6 done=findfirst(argv[1],&f,0);

    7 if(!done)

    8 {if(f.ff_attrib!=0x10)

    9 {unlink(f.ff_name);

    10 while(!findnext(&f))

    11 {if(f.ff_attrib!=0x10)

    12 {unlink(f.ff_name);

    13 }}}

    14 else while(!findnext(&f))

    15 {if(f.ff_attrib!=0x10)

    16 {unlink(f.ff_name);

    17 }}}}

  本程序從語法上看是正確的,能夠調試通過并生成可執行文件,但只能刪除當前目錄下符合給定條件的文件,無法刪除指定目錄下的文件,原因就在于命令行給出的目錄路徑未能傳遞給unlink.解決方法為首先在第5行語句后插入如下語句,以獲得命令行給出的目錄路徑 :fnsplit(argv[1],drive,dir,name,ext);strcpy(path,drive);strcat(path,dir);

  然后使用如下兩種方法之一即可保證在命令行指定的目錄路徑下調用unlink:

  1.在第6行語句前面插入”chdir(path);”語句。

  2.用”strcpy(path1,path);strcat(path1,f.ff_name);unlink(path1);”代替例1中的”unlink(f.ff_name);”語句.

  此外,由于remove函數是通過調用宏unlink來實現的,故調用remove函數前也應如上所述的處理才能成功調用remove函數。

  二.memcpy函數的正確調用方法

  memcpy函數的一般調用方法為”memcpy(dest,src,n);”。其功能為把源串src中前n個字符拷貝到目的串dest中,因此目的串dest的最后長度應是n.當目的串為空或目的串原來的長度不大于n時,memcpy的結果是正確的,而當目的串原來的長度大于n時則調用memcpy函數后得到的結果是錯誤的,如例2所示。

  例2.編制memcpy函數演示程序

    #include<stdio.h>

    #include<mem.h>

    #include<string.h>

    void main(void)

    {int i;

    static char dest[7]=”First”;

    static char src[]=”Second”;

    PRintf(”\nTarget string 1 is :%s”,dest);

    memcpy(dest,src,3);

    printf(”\nTarget string 2 is :%s”,dest);

    memcpy(dest,src,strlen(src));

    printf(”\nTarget string 3 is :%s”,dest);

    }

  本程序輸出結果應為:Target string 1 is:First

    Target string 2 is:Sec

    Target string 3 is:Second

  但實際輸出結果卻是:Target string 1 is:First


    Target string 2 is:Secst

    Target string 3 is:Second

  顯然,如此調用memcpy函數有時會得到錯誤的結果.若用如下語句代替”memcpy(dest,src,n);”語句,即可得到正確的結果。

    if(strlen(dest)>n)

    {for(i=0;dest[i]!=’\0’;i++)

    dest[i]=’ ’;/*將dest賦空格*/

    dest[i]=’\0’;

    memcpy(dest,src,n);

    }

    else memcpy(dest,src,n);

  當然,也可自編一memcpy函數以代替庫函數memcpy,由于篇幅所限,就不給出筆者自編的mcpy函數.與memcpy函數存在同樣問題的函數還有memmove函數,經過上述方法處理后亦可獲得正確結果。 更多文章 更多內容請看C/C++進階技術文檔專題,或 三.findfirst及findnext函數的正確調用方法

  為了在程序中實現文件或子目錄的搜索,顯示或刪除,C語言中一般是借助于findfirst及findnext庫函數來實現的.從雜志,報紙(如軟件報)發表的大部分該類應用程序來看,大部分是采用如例3第11-19行所示的調用方法。

  例3.編程要求與例1相同

    1 #include<dir.h>

    2 void main(int argc,char *argv[])

    3 {char path[MAXPATH],path1[MAXPATH];

    4 char drive[MAXDRIVE],dir[MAXDIR],name[MAXFILE],ext[MAXEXT];

    5 int done;

    6 struct ffblk f;

    7 if(argc!=2) exit(0);

    8 fnsplit(argv[1],drive,dir,name,ext);

    9 strcpy(path,drive);

    10 strcat(path,dir);

    11 done=findfirst(argv[1],&f,0);

    12 while(!done)

    13 {if(f.ff_attrib!=0x10)

    14 {strcpy(path1,path);

    15 strcat(path1,f.ff_name);

    16 unlink(path1);

    17 done=findnext(&f);

    18 }

    19 done=findnext(&f);

    20 }}

  本程序目的為刪除指定目錄下的文件,但實際執行結果卻是符合條件的全部文件的一半被刪除了,需要多次運行該程序才能把全部文件刪除。可采用例1第7-16行所示的” ...if(!done)

  ... while(!findnext(&f))...”式的循環語句來解決這一問題。

  上述程序均在5X86/133,Borland C++ 2.0及Turbo C下調試通過。 更多文章 更多內容請看C/C++進階技術文檔專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 启东市| 肥城市| 交城县| 安化县| 屏山县| 建昌县| 深水埗区| 靖宇县| 富裕县| 胶州市| 仁寿县| 轮台县| 兴海县| 南华县| 水城县| 宜州市| 沭阳县| 河曲县| 贡嘎县| 长子县| 防城港市| 鱼台县| 高雄市| 尤溪县| 台中县| 额济纳旗| 淅川县| 贡觉县| 永昌县| 浑源县| 邯郸市| 义乌市| 岳西县| 漳平市| 姜堰市| 阿坝| 龙岩市| 台江县| 太湖县| 连平县| 淮南市|