C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

news2024/12/24 3:46:57

长度受限制的字符串函数介绍

一、strncpy函数的使用

(一)strncpy使用

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "asdfgdfv";
	char arr2[7] = "zxcvbn";

	strncpy(arr1, arr2, 4);
	printf("str0=%s\n", arr1);

	char* str1 = strncpy(arr1, arr2, 4);
	printf("str1=%s\n", arr1);

	char* str2 = strncpy(arr1, arr2, 6);
	printf("str2=%s\n", arr1);

	char* str3 = strncpy(arr1, arr2, 7);
	printf("str3=%s\n", arr1);

	char* str4 = strncpy(arr2, arr2, 6);
	printf("str4=%s\n", arr2);
  
	return 0;
}

/* STRNCPY.C */

#include <string.h>
#include <stdio.h>

void main(void)
{
	char string[100] = "Cats are nice usually";
	printf("Before: %s\n", string);
	strncpy(string, "Dogs", 4);
	strncpy(string + 9, "mean", 4);
	printf("After:  %s\n", string);
}

(二)strncpy使用的注意事项

•使用时需要包含头文件<string.h>

• 将源字符串的前num个字符复制到目标。如果源C字符串的末尾在复制num个字符之前找到'\0',剩下自动记0,直到总共写入了num个字符。

•拷贝num个字符从源字符串到目标空间。

•如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

(三)strncpy的模拟实现

#include <stdio.h>
#include <assert.h>

char* my_strncpy(char* dest, char* src, int count)
{
	assert(dest && src);//注意  断言指针不是空指针
	char* ret = dest;
	while (count--)
	{
		*dest++ = *src++;
	}
	return ret;
}

int main()
{
	char string[100] = "Cats are nice usually";
	printf("Before: %s\n", string);
	my_strncpy(string, "Dogs", 4);
	my_strncpy(string + 9, "mean", 4);
	printf("After: %s\n", string);
	return 0;
}

二、strncat函数的使用

(一)strncat使用

#include <stdio.h>
#include <string.h>
//strncat
//附加字符
int main()
{
	char string1[100] = "You and I";
	strncat(string1, " together", 9);
	printf("%s\n", string1);

	char string2[100] = "You and I";
	strncat(string2, " study together", 6);
	printf("%s\n", string2);
	return 0;
}

/* STRNCAT.C */

#include <string.h>
#include <stdio.h>

void main( void )
{
   char string[80] = "This is the initial string!";
   char suffix[] = " extra text to add to the string...";
   /* Combine strings with no more than 19 characters of suffix: */
   /* 组合后缀不超过19个字符的字符串:*/
   printf( "Before: %s\n", string );
   strncat( string, suffix, 19 );
   printf( "After:  %s\n", string );
}

(二)strncat使用的注意事项

•使用时需要包含头文件<string.h>

• 将源的前num个字符追加到目标,再加上一个终止的null字符。

(将来源指向字符串的前号码个字符追加到目的地指向的字符串末尾,再追加一个 \0字 符)。

• 如果源中的C字符串的长度小于num,则只有终止之前的内容空字符被复制。(如果来源指向的字符串的长度小于号码的时候,只会将字符串中到\0的内容追加到目的地指向的字符串末尾)。

(三)strncat的模拟实现

#include <stdio.h>
#include <assert.h>

char* my_strncat(char* dest, char* src, int count)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest)
	{
		dest++;
	}
	while (count--)
	{
		*dest++ = *src++;
	}
	return ret;
}

int main()
{
	char string[100] = "You and I";
	char suffix[] = " in the rain";
	printf("Before: %s\n",string);
	my_strncat(string, suffix, 12);
	printf("After: %s\n", string);
	return 0;
}

三、strncmp函数的使用

(一)strncmp使用

//strncmp
//作用是 比较字符串的大小

#include <stdio.h>
#include <string.h>
int main()
{
	char string1[] = "six";
	char string2[] = "seven";
	int len1 = strncmp(string1, string2, 3);
	printf("%d\n", len1);
	char string3[] = "six";
	char string4[] = "seven";
	int len2 = strncmp(string4, string3, 5);
	printf("%d\n", len2);

	return 0;
}

/* STRNCMP.C */
#include <string.h>
#include <stdio.h>

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown fox jumps over the lazy dog";

void main(void)
{
    char tmp[20];
    int result;
    printf("Compare strings:\n\t\t%s\n\t\t%s\n\n", string1, string2);
    printf("Function:\tstrncmp (first 10 characters only)\n");

    result = strncmp(string1, string2, 10);//比较两个字符串的大小,考虑大小写
    if (result > 0)
        strcpy(tmp, "greater than");
    else if (result < 0)
        strcpy(tmp, "less than");
    else
        strcpy(tmp, "equal to");
    printf("Result:\t\tString 1 is %s string 2\n\n", tmp);
    printf("Function:\tstrnicmp _strnicmp (first 10 characters only)\n");

    result = _strnicmp(string1, string2, 10);//比较两个字符串的大小,不考虑大小写
    if (result > 0)
        strcpy(tmp, "greater than");
    else if (result < 0)
        strcpy(tmp, "less than");
    else
        strcpy(tmp, "equal to");
    printf("Result:\t\tString 1 is %s string 2\n\n", tmp);
}

(二)strncmp使用的注意事项

• 使用时,需要包含头文件<string.h>

• 比较字符串中对应的字符时,需要考虑到大小写(ASCII码值)

•返回值的规定:

    • 第一个字符串大于第二个字符串,则返回大于0的数字
    • 第一个字符串等于第二个字符串,则返回0
    • 第一个字符串小于第二个字符串,则返回小于0的数字

•对于比较的字符有大小限制,但比较出现结果后,就会提前结束

(三)strncmp的模拟实现

#include <stdio.h>
#include <assert.h>
#include <string.h>//strcpy 需要的头文件
int my_strncmp(const char* s1, const char* s2, int count)
{
	assert(s1 && s2);
	while (count--)
	{
		if(*s1 == *s2)
		{
			if (*s1 == '\0')
				return 0;
		}
		if (*s1 > *s2)
			return 1;
		else if(*s1 < *s2)
			return -1;
		s1++;
		s2++;
	}
}

int main()
{
	char string1[] = "The quick brown dog jumps over the lazy fox";
	char string2[] = "The QUICK brown fox jumps over the lazy dog";
	printf("Compare strings:\n\t\t%s\n\t\t%s\n\n", string1, string2);
	char tmp[100];
	int result = my_strncmp(string1, string2, 10);
	if (result > 0)
		strcpy(tmp, "greater than");
	else if (result < 0)
		strcpy(tmp, "less than");
	else
		strcpy(tmp, "equal than");
	printf("Result:\n\tString1 is %s string2\n",tmp);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1361289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Origin无法使用主题管理器相关功能或报错:Err, Save Theme dialog error!

问题描述 在使用origin绘图时&#xff0c;往往需要进行大批量绘制同样类型的图。如果每个图都不断地去修改相关设置&#xff0c;无疑是浪费了许多宝贵的时间。为了提高绘图效率&#xff0c;了解到了主题管理器&#xff0c;可在“工具–主题管理器”找到。 然而&#xff0c;当我…

计算机毕业设计-----SSM宠物商城带后台管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 加入购物车,发表留言,提交订单,查看订单信息,会员注册,登录页面等功能。 管理员角色包含以下…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C++补充内容--EasyX-UI界面

esay x 其他 地图打印(利用二维数组) 双缓冲 当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题 开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可…

Python学习之路——文件部分【文件的读取】

目录 先解释一下引文的答案 一、open()打开函数 二、mode常用的三种基础访问模式 三、读-操作相关方法 &#xff08;一&#xff09;read方法 &#xff08;二&#xff09;readlines方法 &#xff08;三&#xff09;with open 语法 &#xff08;四&#xff09;操作汇总 …

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…

PCL提示无法读取强度信息(Failed to find match for field ‘intensity‘.)简单解决方法

问题&#xff1a; 使用CC或者其他软件将las或者其他格式点云转成PCD格式后&#xff0c;然后使用PCL的库进行读取&#xff0c;有时会碰到Failed to find match for field intensity.提示&#xff0c;解决方法如下&#xff1b; 处理方法&#xff1a; 一个比较简单的方法如下&…

对比开源大语言模型的自然语言生成SQL能力

背景 NL-to-SQL&#xff08;自然语言到结构化查询语言&#xff09;任务是自然语言处理&#xff08;NLP&#xff09;领域的一个难题。 它涉及将自然语言问题转换为 SQL 查询&#xff0c;然后可以针对关系数据库执行该查询来回答问题。 该任务是 NLP 中的一个专门子领域&#xf…

C++补充内容--语法篇

这里写目录标题 语法其他语法函数的存储类函数参数默认值格式默认参数位置重载函数的默认参数 指针名与正常指针的自增自减以及解引用与的优先级问题指针的赋值、加减数字、加减指针二维数组中的一些指针辨析输出调用字符指针时 会将该指针以及之后的元素全部输出二维数组未完全…

【力扣题解】P530-二叉搜索树的最小绝对差-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P530-二叉搜索树的最小绝对差-Java题解&#x1f30f;题目描述&#x1f4a1;题解&…

【性能测试入门】详解客户端性能测试和服务器端性能测试!

一&#xff1a;客户端性能测试和服务器端性能测试 客户端性能测试和服务器端性能测试是两个不同但相关的概念: 客户端性能测试: - 测试应用程序客户端(如Web浏览器、移动应用等)的性能,例如加载时间,响应时间等。 - 测试在不同系统配置(CPU、内存、网络等)下客户端的运行性…

在Gitee上维护Erpnext源

在Gitee上维护Erpnext源 官方的frappe和erpnext地址: GitHub - frappe/frappe: Low code web framework for real world applications, in Python and Javascript GitHub - frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP) 1, 仓库地址输入frappe的官…

cissp 第10章 : 物理安全要求

10.1 站点与设施设计的安全原则 物理控制是安全防护的第一条防线&#xff0c;而人员是最后一道防线。 10.1.1 安全设施计划 安全设施计划通过关键路径分析完成。 关键路径分析用于找出关键应用、流程、运营以及所有必要支撑元索间的关系。 技术融合指的是各种技术、解决方案…

适用于生物行业的生信云平台

随着基因检测技术的不断发展&#xff0c;生物信息云平台在基因检测行业的应用越来越广泛。生物信息云平台是一种基于云计算的技术&#xff0c;可以将基因检测数据存储在云端&#xff0c;并通过数据分析、挖掘等技术手段&#xff0c;对基因数据进行处理、分析和解读。 这种技术的…

16、Kubernetes核心技术 - 节点选择器、亲和和反亲和

目录 一、概述 二、节点名称 - nodeName 二、节点选择器 - nodeSelector 三、节点亲和性和反亲和性 3.1、亲和性和反亲和性 3.2、节点硬亲和性 3.3、节点软亲和性 3.4、节点反亲和性 3.5、注意点 四、Pod亲和性和反亲和性 4.1、亲和性和反亲和性 4.2、Pod亲和性/反…

实战干货:用 Python 批量下载百度图片!

为了做一个图像分类的小项目&#xff0c;需要制作自己的数据集。要想制作数据集&#xff0c;就得从网上下载大量的图片&#xff0c;再统一处理。 这时&#xff0c;一张张的保存下载&#xff0c;就显得很繁琐。那么&#xff0c;有没有一种方法可以把搜索到的图片直接下载到本地电…

python实现圆圈烟花_附完整源码【第21篇—python过新年】

文章目录 前言效果图&#xff08;动态&#xff09;完整代码代码讲解总结寄语 前言 烟花是一种庆祝、欢庆或庆典活动中常见的美丽表现&#xff0c;它们以多彩的光芒和炫丽的形状为人们带来欢乐和惊喜。在这个项目中&#xff0c;我们将使用Python编程语言创建一个简单而有趣的程…

使用printJS使网页打印成PDF、网页html结合printJS导出为pdf

先放几个参考链接 感谢&#xff01; Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 &#xff08;html2canvas.js和浏览器自带的打印功能-print.js&#xff09;以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…