首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 图书 | 黑客教材
Flash教程| 卡通制作 | AutoCAD | 3DMax实例 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
当前位置:eNet硅谷动力 > 学院频道 > C/C++

C语言中库函数调用几例
2005-03-15 21:54 来源:eNet论坛
【简 介】
作者在使用C语言编程实践过程中发现,尽管所编程序从语法上看正确的,能够调试通过,但实际执行结果却达不到程序编制的目的。现举几例说明如下,希望能起到帮助C语言初学者少走弯路的作用。
    
加入收藏  设为首页

  作者在使用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函数,经过上述方法处理后亦可获得正确结果。

热门推荐: ASP与数据库应用(给初学者)   php入门


[1] [2]下一页
关键字: 程序设计  编程  C  函数 
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
视频教程】 【专题汇总】 【不懂就问我关闭窗口

QQ音乐播放器2009正式版今天发布!
《铁拳:暗黑复苏》游戏精美壁纸
用Photoshop打造经典免战公益海报
泰国Taechit经典平面设计作品欣赏
十二问让你全面了解跨站脚本攻击
 本栏目最新文章
·初识C++
·数得明白-用C#制作源代码统计软件
·一些常用网络工具历史记录的清理
·VC++编程隐藏计算机中的鼠标
·如何编写异常安全的C++代码
 精彩回放
·3DSMAX打造书本翻开效果
·共享上网技巧应用四则
·陪酒女浸泡在酒里的青春
·美女的性感靓丽婚纱设计
·妖冶身姿 死或生3壁纸
·剿灭Win XP下的29个烦恼
·黑客必备 NET命令大全
·用PS制作精致绝伦的红酒
 精彩推荐
 今日软件下载
杀毒软件免费随便用
瑞星全功能安全软件2009 基于“云安全”策略和“智能主动防御”技术开发.
www.rising.com.cn
 往日推荐
·推荐“美图秀秀”就能赚Q币
·五大搜索引擎横向评测
·防御计算机病毒十大步骤

论坛精华
·眼泪、五官、闪电、 
·photoshop完美扣图教 
·PhotoShop实例精选电 
·精灵女孩白夜 
·Photoshop给多斑的人 
·Photoshop将美女照片 
热点推荐
绘制逼真金蛋
浪漫婚纱照片
Flash视频编程
Ulead GIF教程
热点关注
·Flash CS4 制作经典小游戏
·C语言程序设计视频教程
·PHP+MYSQL开发视频教程
·Flash CS4从入门到精通教程
·服装设计与效果图绘制教程
·21视频之Fireworks8网页制作
·Vray高级实例应用视频教程
·CorelDRAW14入门到高级教程
·Vray高级实例应用视频教程
全国计算机等级考试二级(VB语言)
往日推荐
网站重构设计
鹏哥C#教程
服装设计教程
PS唯美风景
焦点关注