c语言学习零碎整理(8):看一个标准的库函数是怎么写的

c语言*零碎知识便签 这篇博客是写一写c语言学习过程中的一些零碎的知识,不定时更新!一部分原创,一部分转自一些博客,或者是摘抄书本上的讲解~,c语言知识本来就比较零碎,感觉就是捡漏一样。 1 引脚,又叫管脚,英文叫 Pin。就是从集成电路(芯片)内部电路引出与外围电路的接线,所有的引脚就构成了这块芯片的接口。引线末端的一段,通过软钎焊使这一段与印制板上的焊盘共同形成焊点。我们电脑的触摸鼠标就是运用了引脚。 2 ... 阅读详情

char * strcpy( char *strDest, const char *strSrc ) 
{
    assert( (strDest != NULL) && (strSrc != NULL) );
    char *address = strDest; 
    while( (*strDest++ = * strSrc++) != ‘/0’ )
           ;
    return address;
}
注意的地方:
1,const char *strSrc  因为strSrc是输入参数,不能被修改。
2,assert的使用。头文件加上include<assert.h>。对源地址和目的地址加非0断言,加强程序的健壮性。如果strDest 或者strSrc为空指针,那么系统会提示:Assertion failed,并指出出错位置。
3,用了一个变量address。是为了实现链式操作,将目的地址返回。比如strcpy( s,strcpy(t,a) );把a的内容复制给t,再把t的内容复制给s。
4,while( (*strDest++ = * strSrc++) != ‘/0’ )。根据优先级,先把strSrc所指内存的值赋值到strDest所指的内存中,然后strSrc指向下一块内存,strDest也一样。直到遇到'/0'为止。此时,*strDest和*strSrc的值都为'/0'。


我自己写了一个程序,用来验证这个函数。但却犯了一个错误。后来看了一下自己以前的笔记才发现错误的原因。贴出来,看你能看到错误在哪里吗?
#include<stdio.h>
#include<assert.h>

char *strcopy(char *strDest, const char *strSrc);

main()
{
 char *s = "moonbingbing";
 char *t = "wenming";
 
 strcopy(s,t);
 printf("%s/n%s/n",s,t);
 return 0;
}

char *strcopy(char *strDest, const char *strSrc) 
{
    assert( (strDest != NULL) && (strSrc != NULL) );
    char *address = strDest; 
    while( (*strDest++ = * strSrc++) != '/0' )
           ;
    return address;
}


错就错在char *s = "moonbingbing";char *t = "wenming";
因为在ANSI C中,指针p 指向的字符串是当作常量来处理的。如果你的编译器是tc2.0 ,tc++3.0 ,wintc,那么编译器不会报错。从这个程序可以看出,写一个程序不难,但写好就容易了。这些库函数都是高手们写的,要考虑健壮性,安全性,扩展性。这就是高手和和一般人的区别了。
这些东西在林锐的书上见过,有一段时间没温习c语言了。看一遍就有一些新的收获,温故而知新啊。所以记下来,别再忘了。


残差检验_第三十讲 R语言-Cox比例风险模型的假设检验条件 在介绍完 Cox比例风险模型的详细理论和R实现以后(插入链接!!!),我们已经知道Cox比例风险模型可以较好的同时矫正多个混杂因素对结果的影响,同时我们遗留下来了一个问题:Cox比例风险模型的假设检验条件是什么?这一讲,我们将对此进行解答。请注意,如果使用不当,统计模型可能会产生误导性的结论。因此,检查给定的模型是否适合数据类型是非常重要的!1. Cox比例风险模型的假设条件Cox比例风险模型的成... 阅读详情

相关推荐

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

mizhiakk的博客 8410

Visual C++中的异常处理浅析

    Visual C++提供了对C语言、C++语言及MFC的支持,因而涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处理进行了扩展,提出了结构化异常处理(SEH)的概念,它支持C和C++(与之相比,MFC异常处理仅支持C++)。    一个典型的异常处理包含如下几个步骤:    (1) 程序执行时发生错

韦编二绝 1091

Unity3d 编译发布到安卓平台时出现的问题集

环境搭建好了,android SDK也有了,但导出的时候提示Error building Player: Win32Exception: ApplicationName='java.exe'....... 国内好像没看到解决方法。在Unity3d的论坛里面看到一个解决方法,把C:\windows\system32\java.exe复制到C:\Windows\SysWOW64里面,我这里就解决

erictang01的专栏 1773

【C语言】函数----函数的分类、库函数详解(strcpy、memset)、自定义函数的实现(找较大值、交换两个数)

1.在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 2.一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。

宁可枝头抱香死,何曾吹落北风中。 2226

Dify+MCP Server打造禅道AI智能助手

Dify AI与MCP Server结合打造的禅道AI智能助手,实现了项目管理智能化升级。该方案通过大语言模型和自动化工作流,提供四大核心功能:1)自动化报表生成,支持多维度数据统计与可视化;2)禅道系统管理操作,简化产品/项目/任务管理流程;3)基于知识库的智能问答系统;4)数据库灵活查询与可视化输出。系统采用分层架构,通过MCP协议实现AI与数据源解耦,解决了传统禅道在数据孤岛、工具碎片化等问题。实际应用验证了其在用户管理、任务创建、Bug处理等场景的高效性,显著提升了项目管理效率。

oNew_Lifeo的博客 1708

Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service

本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。

weixin_28314575的博客 321

C语言【库函数与自定义函数】详解

介绍C语言中的库函数及自定义函数

m0_70980326的博客 9252

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4673

4、库函数的编写

1.简单 该函数实现某引脚的gpio输出为低电平。BRR寄存器的低16位正好对应各个引脚号的电平设置。所以定义好各个引脚的值,直接赋值给寄存器即可。 2.复杂 有些功能不仅仅是两种(0,1),有些功能可以是四种(00,01,10,11)。而且对一个引脚的设置包括几类功能,而且还是耦合的。这种情况下的库函数编写就复杂多了。 比如gpio引脚的初始化设置。gpio_pin是引脚号,gpio_spee...

qq_34190043的博客 1146

nvidia系列教程-AGX-Orin linux源码下载编译

NVIDIA AGX Orin 是一款高性能的嵌入式计算平台,广泛应用于人工智能、自动驾驶、机器人等领域。为 AGX Orin 编译定制的 Linux 内核,可以更好地适应特定应用需求,增强系统的灵活性。本文将详细介绍如何下载、配置和编译适用于 AGX Orin 的 Linux 内核源码。本文介绍了如何为 NVIDIA AGX Orin 平台下载、配置和编译定制的 Linux 内核源码。通过编译和部署定制内核,您可以更好地控制系统的行为,并根据特定应用需求进行优化。

flypig has a dream! 1283

【异常】OpenAI提示内容有误 Invalid prompt: your prompt was flagged as potentially violating our usage policy.

用户需优先调整提示内容,确保符合OpenAI的使用政策。若问题持续,建议结合请求ID和具体代码示例联系官方支持。同时,可参考腾讯云、Microsoft Q&A等平台提供的错误处理实践(如重试机制、日志记录)优化代码健壮性。

奶爸的编程之路,也就一周冷个三天 2078

数据库基础之函数

一、字符函数 1、拼接字符串 concat(str1,str2,...sn)//返回结果为连接参数产生的字符串,如果任何一个参数为NULL,则返回值为NULL concat_ws (x , s1 , s2 ,....)//第一个参数 x 是其他参数的分隔符,分隔符可以是一个字符串,也可以是其他参数 repeat( str,x ) //返回str重复x次的结果 案例 select repeat('abc',3) //abcabcabc 2、截取字符串 left(str,x) //返回字符串str最左边

clyu的博客 1109

【教程4>第4章>第20节】基于FPGA的costas环整体实现与仿真测试

Costas 环是一种用于载波同步的闭环反馈控制系统,主要应用于通信系统中的相干解调。其基本原理是通过鉴相器(Phase Detector,PD)比较接收信号与本地载波信号的相位差,将这个相位差信息经过环路滤波器(Loop Filter,LF)滤波后,去控制数控振荡器(Numerically Controlled Oscillator,NCO)的输出频率和相位,使得本地载波能够跟踪接收信号的载波,最终实现载波同步。Costas 环环路滤波器在载波同步过程中起着不可或缺的作用。

FPGA/MATLAB学习教程/源码/项目合作开发 1263

c语言学习零碎整理(1):缓冲区

觉得学习一门语言有三个方面:一是语言本身的学习:语法,函数,特性等等;二是系统或计算机底层方面的了解:计算机的组成原理,操作系统额概念等等;三是算法和数据结构的学习.我想如果这三个方面学到融会贯通的话,就可以称为高手了吧.我的整理中主要是第一和第二个方面,至于算法和数据结构,等到大三有时间的时候再去深入学习一下.(买了半年了,还没看多少,惭愧ing).1,为什么要用缓冲区?如:  int c; 

wayne 我的陋室我做主 2263

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

00 踏上 Go 语言学习之旅

你好,我是大壮,在技术领域从业近 10 年。2021年,我因为 Docker 接触了 Go 语言,其简洁的语法、高效的开发效率和语言层面上的并发支持深深地吸引了我。经过不断地学习和实践,我对 Go 语言有了更深入的了解,不久后,便带领团队转型 Go 语言开发,提升了团队开发效率和系统性能,降低了用人成本。在带领团队转型 Go 语言的过程中,我不断把自己学习 Go 语言的经验沉淀成文章,方便大家利用碎片时间学习,于是“飞雪无情”的公众号和知乎号就诞生了。

周壮的博客 1070

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Go语言教程第一集 入门

经过不断地学习和实践,我对 Go 语言有了更深入的了解,不久后,便带领团队转型 Go 语言开发,提升了团队开发效率和系统性能,降低了用人成本。

fegus的博客 293

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

00 开篇词 Go 为开发者的需求设计,带你实现高效工作

《Go语言高效开发与实践指南》摘要:技术总监飞雪无情基于10年经验,分享Go语言的优势与应用价值。作为兼具C语言性能和Java便利的现代语言,Go凭借简洁语法、高效并发和强大标准库,成为微服务和云原生开发的首选。专栏系统设计5大模块:从基础语法、高效并发到底层原理,结合工程管理和实战项目(HTTP/RPC服务),帮助开发者深入理解并快速上手。特别针对常见学习痛点——知识碎片化、思维转换困难等,通过生活化案例和源码分析,提供可落地的解决方案。适合1-3年经验的开发者转型学习,也是新手构建编程思维的高效路径。

AatZai的博客 531

3个技巧让ToastFish发挥最大价值:从入门到精通

你是否曾想过,在繁忙的工作间隙、上课走神的片刻,或是排队等待的零碎时间里,能够悄无声息地提升自己的英语水平?ToastFish就是这样一款神奇的软件——它巧妙地利用Windows通知栏,让你在不经意间完成单词记忆,真正做到"摸鱼"与学习两不误。 今天,我将带你从零开始,探索ToastFish的完整使用旅程,分享几个让学习效果翻倍的小窍门,让你在不知不觉中成为单词记忆高手。 ## 🚀 启程:轻

gitblog_00875的博客 281

常见的一些库函数

库函数是一组预先定义好的函数,可以通过包含相应的头文件来使用。它们提供了各种常用的功能和算法,使得编程更加方便和高效。

2301_80634989的博客 3326

【c基础】如何写一个库?

/ 定义结构体int value1;int value2;} MyStruct;// 声明全局变量// 函数原型// 定义全局变量// 实现函数1// 实现函数2main.cmain.c。

三少爷的甲壳虫 3343

c语言怎样写好自己的库函数,自己动手写字符串库函数 一(C语言实现)

在coding中最常使用的就是对于字符串的处理问题,接下来我们自己动手写库函数,尽量使用指针操作,而不是数组操作//头文件 string.h#include #include //字符串结构体typedef struct CString{char* str;int len;}string;//初始化void Init(string* str);void Init_With_Len(string* ...

weixin_39932939的博客 651

c语言库函数及其实现

目录 一、strlen函数 1、定义 2、strlen的易错点 3、strlen的三种模拟实现方式 二、strcpy函数 1、定义 2、strcpy的模拟实现。 三、strcmp函数 1、定义 2、strcmp的模拟实现 四、strstr函数 1、定义 2、strstr的模拟实现 五、strcat函数 1、定义 2、注意事项 六、memcpy函数 1、定义 2、memcpy模拟实现 七、memmove函数 1、定义 2、memmove函数模拟实现 ...

weixin_52540905的博客 1128

【Linux】——库函数

1、库函数的基础概念 2、基础文件操作函数 2.1fopen 2.2fread 2.2fwrite 2.4fseek 2.5fclose

qq_43412060的博客 2287

C语言中的函数 | 库函数和自定义函数

写在前面: 今天我们需要学习和了解的是C语言中的函数,其中C语言的函数划分为库函数和自定义函数两种.接下来我们一起探究两者之间的关系. 一.C语言中函数的分类 库函数 自定义函数 二.库函数 库函数到底是什么呢? 顾名思义,可以通俗的理解为库里面的函数.这些函数都是频繁使用的,为了提高编程效率,将一些常用的函数封装成库,后面直接调用使用. 想要进一步了解C语言中库函数的同学可以移步下面的网站进行阅览:cplusplus.com - The C++ Resources Networkht.

HUAERBUSHI521的博客 4795

【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....

C语言初阶函数的基本知识详解

小刘好好学习的博客 1662
上一篇: 初识ERWin
下一篇: c语言学习零碎整理(9):传值调用,并不简单(特别是有指针的时候)
wayne92
博客等级 码龄23年 55粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值