首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | 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  函数 
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
1.您是否愿意通过eNet在线报名的方式,参加培训机构的培训?
是 
2.通过硅谷动力报名,您希望得到哪些优惠?
学费打折 赠送课时
3.报名后,您更愿意将培训费用:
通过eNet转交培训机构
直接交给培训机构
4.您在选择培训机构时,更注重:
培训机构名气  培训费用
5.您的年龄范围:
15~18岁  19~22岁
23岁以上
视频教程】 【专题汇总】 【不懂就问我关闭窗口

用Photoshop笔刷打造梦幻蝴蝶仙子
美不胜收 XP也用Vista七彩泡泡屏保
D.SPEED可爱的宇宙机器人设计欣赏
网络工程师必须掌握的44个路由知识
一周软件回顾 傲游软件易用性更强
 本栏目最新文章
·初识C++
·数得明白-用C#制作源代码统计软件
·一些常用网络工具历史记录的清理
·VC++编程隐藏计算机中的鼠标
·如何编写异常安全的C++代码
 精彩回放
·3DSMAX打造书本翻开效果
·共享上网技巧应用四则
·陪酒女浸泡在酒里的青春
·美女的性感靓丽婚纱设计
·妖冶身姿 死或生3壁纸
·剿灭Win XP下的29个烦恼
·黑客必备 NET命令大全
·用PS制作精致绝伦的红酒
 精彩推荐
 今日软件下载
汇聚精彩 清晰流畅
NETiTV
网络电视王中王
 往日推荐
·手工破解网吧多种限制
·Windows 网络管理技巧
·WMP 10使用技巧三则
·女孩问你帅不帅 要小心
·注册表优化XP 20招
·制作XP万能ghost光盘
·WMP10火拼DVD播放器
·街头霸王图片集中营
·五大搜索引擎横向评测
·防御计算机病毒十大步骤

论坛精华
·PS去掉图片上的文字 
·photoshop完美扣图教 
·国外高手的调色合成 
·史上最强最多 photo 
·PS初学者十三课,献给 
·eNet学院史上最优秀 
热点推荐
修复灰暗照片
浪漫婚纱照片
Flash视频编程
章子怡月历桌面
热点关注
·网站开发全程设计视频教程
·Photoshop CS3平面广告设计
·C++从入门到精通视频教程
·ASP.NET经典实例视频教程
·Flash8 Pro经典实例视频教程
·计算机等级考试二级VB上机
·eNet网络安全视频教程
·瑞星杀毒30元轻松用全年
·瑞星卡卡上网助手 正版免费
有女如莲 Photoshop手绘古典美女
往日推荐
网站重构设计
鹏哥C#教程
美女怀旧照片
网站开发
焦点关注