麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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++進階技術文檔專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色诱亚洲精品久久久久久 | 污黄视频在线观看 | 日韩精品久久久久久久九岛 | 97zyz成人免费视频 | 91色一区二区三区 | 日本一区二区不卡高清 | 毛片免费视频播放 | av不卡免费在线 | 国产成人在线播放视频 | 国产美女视频一区二区三区 | 国产精品18久久久久久久久 | 国产精品伊人久久 | 欧美囗交 | 国产小视频一区 | 久草在线最新 | 久久久久久久.comav | 国产精品一区二区免费在线观看 | 久久久无码精品亚洲日韩按摩 | wwwxxx免费视频 | 久久综合综合久久 | 国产亚洲精品久久午夜玫瑰园 | 国产一区二区在线免费播放 | 亚洲欧美成aⅴ人在线观看 av免费在线播放 | av在线免费看网站 | 国产毛片毛片 | 精品一区二区在线观看视频 | 男男啪羞羞视频网站 | 欧美中文字幕一区二区三区亚洲 | 久久久久久久.comav | 成人一区久久 | 欧美精品成人一区二区在线观看 | sese在线视频 | 久久久aa| 亚洲日本韩国精品 | 亚洲成人入口 | 亚洲天堂岛国片 | 毛片小网站 | 国产精品一区在线观看 | 欧美18videos性处按摩 | 永久久久 | 久久成年人视频 |