【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。

比较strncpy与strcpy区别

两者均为字符串拷贝函数,用于拷贝字符串。但strcpy比较时找字符串结束标志‘\0’,一旦找到 ‘\0’,比较结束。而后者我们可以根据实际情况完成指定长度n的字符串比拷贝,因此函数strcpy里面多了一个字母n,即strncpy.由此,从此处看strncpy比strcpy功能强大一点。

关于strcpy可以查看我的博客链接:http://10740184.blog.51cto.com/10730184/1714516

strncpy代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

char *my_strncpy(char *dest, const char *src, size_t count)
{
    assert(dest);
    assert(src);
    char *ret = dest;
    while ( count && ( *dest++ = *src++ ) )
    {
        count--;
    }
    if (count == 0)
    {
        *dest = ‘\0‘;
    }
    return ret;
}
int main()
{
    char arr[] = "hello world!";
    char p[20];
    char *ret = my_strncpy(p, arr,9);
    printf("%s", ret);
    system("pause");
    return 0;
}
时间: 2024-08-07 21:20:56

【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。的相关文章

语言模拟ATM自动取款机系统

C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入:用户输入密码,才能进入. 登陆成功界面:共有六个选项,查询余额.取款.存款.转账,修改密码,退出分别对应1,2,3,4,5,6选项,若序号输入不正确会予以提示. 选定1后,进入查询余额界面: 选定2后,进入取款界面: 选定3后,进入存款界面: 选定4后,修改密码,选定5,进入转账:选定6,退出界面:

关于c语言模拟c++的多态

关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主要通过函数指针实现,可以参考<Object Orientated Programming in ANSI-C> //shape.h #ifndef __SHAPE_H #define __SHAPE_H #include <stdio.h> #include <stdlib.h&

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法: 接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:     对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Swift中也有一样用法的结构体.毕竟Swfit是集大家之所成的现代语言.

C语言的结构体和 C++结构体的区别

 C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的初始化方法> 接着下面两个代码截图(一个是C源码,一个是C++源码)对比你就初步体会到C语言的结构体和C++结构体的区别了:      对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Sw

c语言声明的解读、typedef与define的区别

读声明: 1.最先从左往右找到最左边的标识符. 2.查看标识符右边的下一个符号.若是方括号,则表示到“...的数组”. 3.如果是一个左圆括号.到右括号为止的内容表示“返回...的函数”. 4.再往右找,如果左边的符号是一个左括号, 这个左括号把已处理的部分声明组合在一起,直到遇见对应的右括号,然后从第二步重新开始. 5.如果是*,表示“指向...的指针”: 如果是const,表示“只读”: 如果是volatile,表示“volatile”: 6.剩下的符号可一并阅读. 练习例子:char *

CC++语言0|C和C++的联系与区别

1 C语言 C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言. 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言.并且他用B语言写了第一个UNIX操作系统. 1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言.最后

C语言::模拟实现strlen函数

编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0之外的所有字符即可. 有三种方法可以解决这个问题. 算法总结 方法一:设置一个整型计数器,遍历字符串. 方法二:通过不断函数自身的递归. 方法三:与方法一类似,设置一个char*变量标记字符串尾部,通过指针相减得到字符长度. 核心代码 //方法一:通过设置整型计数器,模拟实现strlen函数. int my_

C语言::模拟实现strcmp函数

题目要求 编写一个C语言程序模拟实现strcmp函数. (我们依然先模拟实现strcmp函数,然后再对照string.h库中strcmp函数的实现,对比与大师之间的差距.) 算法分析 通过上一篇文章:C语言::strcmp函数功能.原型.用法及实例我们获得了strcmp函数的如下信息: strcmp原型:int strcmp( const char *s1, const char *s2 ); strcmp功能:将两个字符串自左向右逐个字符进行相比(根据ASCII值大小),直到出现不同的字符或遇

C语言::模拟实现strcat函数

题目要求 编写一个C语言程序模拟实现strcat函数. (我们不妨先模拟实现一下strcat函数,然后再对照一下string.h库函数中strcat函数代码的实现,与大师肩并肩.) 算法分析 strcat函数功能:将两个字符串连接起来,最终返回连接后字符串的首地址. strcat函数原型:char *strcat(char *dest,const char *src); 我们清楚地了解了strcat函数功能和原型之后,就很容易分析出算法... 算法总结 第一步:将dest指向的内容循环遍历至'\