C语言 字符数组与字符串的关系strcmp/memcmp strcpy / memcpy

字符数组与字符串及其区别 字符数组的定义:是利用char定义的数组。比如arr[10]; 字符串的的定义:是用 ""包括的字符序列,字符串的末尾有一个隐含的'\0' 字符数组在某种特定情况下会成为字符串: 判断字符数组是否为字符串:就看字符数组是否有'\0' ,有'\0'就是字符串,否则不是 比如: char str1[10] = { 'a','b','c','d','e','f','g','h','i','j' };//字符数组,不是字符串 char str2[10] = { 'a',... 阅读详情

概述

字符数组和字符串在C语言中有密切的关系,可以说字符串就是以字符数组的形式存在的。

1. 字符数组:字符数组是C语言中的一种数据类型,它由一系列连续的字符元素组成。在C中,字符串实际上就是以字符数组的形式存储的。例如,`char str[10];` 就是一个字符数组,它可以存储最多10个字符。

2. 字符串:字符串是一串字符的序列,以 `\0`(空字符,ASCII值为0) 结尾。在C语言中,我们通常用字符数组来表示字符串,而且约定字符串的结尾必须是 `\0`,以便在处理字符串时能够正确确定字符串的结束位置。例如,"Hello" 是一个字符串,在C语言中可以用 `char str[] = "Hello";` 来表示。

字符串和字符数组的区别主要在于对字符串的约定:字符串必须以 `\0` 结尾,而字符数组没有这个约定。在字符数组中,我们可以存储任意字符,而不一定需要以 `\0` 结尾。但是,如果我们希望以字符串形式使用字符数组,就必须手动在最后一个位置添加 `\0` 终止符。

在许多C标准库函数(例如 `strlen`、`strcpy`、`strcmp` 等)中,都是基于字符串的概念,它们会自动处理以 `\0` 结尾的字符数组。因此,在处理字符串时,我们通常使用字符数组,并遵循以 `\0` 结尾的约定。

strcmp/memcmp

strcmp

以下是一个使用strcmp函数比较两个字符串的示例,在这个示例中,strcmp函数分别比较了str1和str2,以及str1和str3,并输出结果。result1将是一个非零值,因为"Hello"和"World"不相等,result2将为0,因为"Hello"和"Hello"是相等的。

C语言strcmp比较两个字符串是否相同_LSL_Blogs的博客-优快云博客

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

int main() {
    const char str1[] = "Hello";
    const char str2[] = "World";
    const char str3[] = "Hello";

    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    if (result1 == 0) {
        printf("str1 and str2 are equal.\n");
    } else {
        printf("str1 and str2 are not equal.\n");
    }

    if (result2 == 0) {
        printf("str1 and str3 are equal.\n");
    } else {
        printf("str1 and str3 are not equal.\n");
    }

    return 0;
}

memcmp

strcmp函数用于比较以\0结尾的字符串,如果将一个char数组传递给strcmp函数,但它不以\0结尾,那么strcmp函数无法正确识别字符串的结束位置,可能导致错误的结果。可以考虑使用memcmp函数来进行字节级别的比较。memcmp函数用于比较指定数量的字节,不考虑字符串终止符。

C语言 memcmp 内存块的字节级别比较_LSL_Blogs的博客-优快云博客

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

int main() {
    char array1[24] = "Hello";
    char array2[24] = "Hello";

    int result = memcmp(array1, array2, sizeof(array1));

    if (result == 0) {
        printf("array1 and array2 are equal.\n");
    } else {
        printf("array1 and array2 are not equal.\n");
    }

    return 0;
}

strcpy/memcpy

strcpy 和 memcpy 是C语言中用于复制内存块的函数,但它们有不同的使用场景和目的。

strcpy

strcpy 函数用于将一个以\0结尾的字符串复制到另一个字符数组中。其原型在 string.h 头文件中声明如下:

char *strcpy(char *dest, const char *src);

其中,dest 是目标字符数组的指针,src 是源字符串的指针。函数返回值为指向目标字符数组的指针,即 dest。

strcpy 会将源字符串 src 中的字符逐个复制到目标字符数组 dest 中,直到遇到源字符串的终止符 \0,并将 \0 也复制到目标字符数组中,从而确保目标字符数组成为一个有效的以 \0 结尾的字符串。

示例

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

int main() {
    char source[] = "Hello, World!";
    char destination[20];

    strcpy(destination, source);

    printf("Source: %s\n", source);
    printf("Destination: %s\n", destination);

    return 0;
}

输出

Source: Hello, World!
Destination: Hello, World!

memcpy

memcpy 函数用于在内存块之间复制一定数量的字节,而不仅仅用于字符串。其原型在 string.h 头文件中声明如下

void *memcpy(void *dest, const void *src, size_t n);

其中,dest 是目标内存块的指针,src 是源内存块的指针,n 是要复制的字节数。

memcpy 会从源内存块 src 复制 n 个字节到目标内存块 dest 中,不会考虑字符数组的终止符 \0。这意味着 memcpy 可以用于复制任意类型的数据,而不仅仅是字符串。比如字符数组

示例:

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

int main() {
    char source[] = "Hello, World!";
    char destination[20];

    // 使用memcpy复制字符数组
    memcpy(destination, source, sizeof(source));

    printf("Source: %s\n", source);
    printf("Destination: %s\n", destination);

    return 0;
}

输出:

Source: Hello, World!
Destination: Hello, World!

总结:

  • 使用 strcpy 函数时,要确保目标字符数组有足够的空间容纳源字符串,以及终止符 \0。
  • 使用 memcpy 函数时,要确保目标内存块有足够的空间容纳源内存块的字节,不需要考虑终止符 \0。

总结

字符串和字符数组的区别主要在于对字符串的约定:字符串必须以 `\0` 结尾,而字符数组没有这个约定。在字符数组中,我们可以存储任意字符,而不一定需要以 `\0` 结尾。但是,如果我们希望以字符串形式使用字符数组,就必须手动在最后一个位置添加 `\0` 终止符。

C语言字符串比较详解:strcmp和strncmp函数的使用方法和规则 strcmp函数用于比较两个字符串的大小关系。它按照从左到右的顺序逐个比较两个字符串中的字符,直到遇到第一个不同的字符,然后根据字符的ASCII码值来确定两个字符串的大小关系。如果两个字符串完全相同,则返回0。如果两个字符串在某个位置上的字符不同,则返回第一个不同字符的ASCII码值差。如果其中一个字符串的长度比另一个短,但前部分字符都相同,则返回长度差。strncmp函数与strcmp函数类似,但是它提供了比较前n个字符的功能。 阅读详情

相关推荐

C/C++常用的字符串函数

字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,需要调用头文件include。在C/C++编程中经常会遇到字符串的处理,比如路径的切割、信号的判断(字符串比较),以及字符串大小的计算,熟练掌握常用的字符串函数,了解其可以实现的功能,对于做项目大有裨益。

qq_35713097的博客 7320

扩展 | 字符数组与字符串之间区别&函数的使用方法

文章目录一、字符数组与字符串之间区别1、字符数组及字符串的定义与初始化2、他们在内存中存储的形式3、字符串的表示形式4、赋值方式的不同5、字符数组及字符串的处理函数6、字符数组及字符串作为函数的参数二、总结函数的使用方法1、函数的声明以及函数原型2、函数形参与实参的区别3、return 语句的作用4、全局变量和局部变量的理解5、函数的传值调用及传址调用的区别6、函数的递归调用三、代码演示1、字符数组与字符串之间区别演示代码2、函数的使用方法演示代码 一、字符数组与字符串之间区别 1、字符数组及字符串的定义与

童话与梦的博客 8652

【C语言进阶】字符串&内存函数

前言: 字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中。字符串常量适用于那些对它不做修改的字符串函数。同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 string.h 中。 目录 一、求字符串长度 strlen strlen函数的模拟实现 二、长度不受限制的字符串函数 strcpy strcpy函数的模拟实现 strcat strcat函数的模拟实现 str...

HyDraZya的博客 1567

C语言 —— 字符串与字符数组

字符串与字符数组

weixin_45767909的博客 7989

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

C语言之字符串与字符数组的区别

1.字符串的定义: (1)单个字符:(2)一维字符串数组: 3.字符串和字符数组的区别: c语言的字符串由C的字符数组末尾加上'\0'变形而成。

云小逸的博客 1万+

Python中优化模块scipy.optimize的优化算法介绍

如果你有一个特殊的优化问题,你可以使用对象来自定义问题的求解。# 自定义目标函数# 自定义优化问题custom_problem.fun = custom_objective_function # 目标函数custom_problem.x = [1, 1] # 初始猜测# 执行优化# 打印结果在上述例子中,我们自定义了一个对象,并指定了目标函数和初始猜测,然后使用minimize函数进行求解。Scipy的优化模块提供了丰富的功能,适用于各种优化问题。

Pandas120的博客 3048

memcpy与strcpy区别,memcmp与strcmp的区别

memcpy c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 中文名 内存拷贝函数 外文名 memcpy 功能 拷贝n个字节 返回值 指向dest的指针 函数原型 void *memcpy(void *dest, const void *src, size_t n); 功能 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 所需头文件 C...

modi000的博客 4272

关于solidworks无法获得下列许可SOLIDWORKS Standard的解决方法

在使用solid works的时候,出现无法获得下列许可SOLIDWORKS Standard,刚开始还以为软件出了问题,经过一方折腾找到了解决方法。希望这个方法可以帮助到您 找到这个服务 问题到这里就已经得到了解决,但更大的问题是,要是每次遇见这种都要这么麻烦,岂不是很累?这里也提供一种方法。考虑到每个人的情况,下面说的可能有一点啰嗦。 !!!!!!注意那个在此期间之后重新启动服...

Chaosna13的博客 7万+

ROS机器人里程计模型

3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Are you ready? 没准备好也开始了。 3.5.1 常用坐标系系统模型 在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XR YR OR 、传感器坐标系XS YS OS

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

C语言进阶-字符串函数与内存函数

前言 本章主要讲解: 字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp 字符串查找 strstr strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset memcmp 写在前面的话: C语言本身是没有字符串类型的 字符串通常放在常量字符串(不做修改)中或者字符数

~ 2410

Python爬虫实战——如何自动爬取百度搜索结果页面

本文介绍了如何使用Python爬虫抓取百度搜索结果页面的内容,包括如何构建搜索URL、获取页面HTML、解析内容、处理翻页以及存储数据等。通过该教程,您可以轻松实现批量抓取百度搜索结果,并为后续的数据分析和处理打下基础。希望本文能为您在爬虫开发、数据分析等领域提供帮助。如果您在实际应用过程中遇到问题,可以参考反爬虫应对策略,并结合实际需求进行调整。

2201_76125261的博客 1711

字符串中一些比较常见的函数(strcmp,strcpy,memcmp,memcpy,memset,strcat,strchr等)

字符串中一些比较常见的函数(strcmp,strcpy,memcmp,memcpy,memset,strcat,strchr等)

weixin_64603510的博客 4122

银河麒麟V10等保加固清单:安全基线配置一篇搞定(附逐项检查表)

通过限制使用SSH直接以root身份登录,禁用公钥登录的方式加强SSH服务的安全性。更改SSH默认端口可在一定程度上防止被黑客使用大批量扫描方式攻击。通过修改SSH的配置文件限制可以使用SSH服务远程管理的主机。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 817

JavaScript(JS)、ECMAScript(ES)和TypeScript(TS)

JavaScript、ECMAScript和TypeScript是现代Web开发中不可或缺的技术。它们各自具有独特的特点和优势,相互补充,共同推动着Web开发的发展。了解它们的概念、特点、应用场景和发展历程,有助于我们更好地掌握和使用这些技术,提高开发效率,实现更高质量和更可靠的Web应用。

u013558123的博客 1719

C字符串+内存操作函数strlen strcpy strcmp strstr strtok strerror memcpy memmove memset memcmp

C语言本身没有字符串类型,字符串通常放在常量字符串或者字符数组中,字符串常量适用于那些对它不做修改的字符串函数。 目录 1. 字符串函数strlen strcpy strcmp 1.1 strlen函数介绍 1.1.1 strlen使用与模拟 一、使用 二、三种模拟实现 1.2 strcpy函数介绍 1.2.1 strcpy使用与模拟 一、使用 二、模拟 1.3 strcat函数介绍 1.3.1 strcat使用与模拟 一、使用 二、模拟 1.4 strcmp函数介...

TT_run的博客 1892

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C:请实现一个strlen、strcmp、memcmp、strcpy、memcpy等函数

size_t my_strlen(const char *s) { const char *sr=s; while(*sr != '\0') sr++; return sr-s; } int my_strcmp(const char *cs, const char *ct) { int res=0; do { res = *cs++ - *ct++; if (res) break; } while (*cs); return res

诸葛一帆丶的博客 2204

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C语言】字符函数和字符串函数

(1)函数头部size_tstrlen(constcharstring(2)注意事项字符串以 '\0'作为结束标志,strlen函数返回的是在字符串'\0'前面出现的字符的个数(不含\0)参数指向的字符串必须要以\0结束函数的返回值是类型是 size_t 这是无符号整型(易错)(3)strlen的使用int main()//获取字符串的长度return 0;(4)strlen的模拟实现//普通实现count++;

加油!!! 2254

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言<string.h>中常用的字符串相关的函数

功能:将源字符串(包括终止的空字符 '\0')完全复制到目标字符串中。返回值:返回目标字符串的指针 dest。

m0_56721445的博客 1885

字符串函数和内存函数(strlen,strcpy ,strcat ,strcmp,strstr,memcpy,memmove,memcmp,memset)

strlen 、 strcpy 、 strcat 、 strcmp 、strncpy、strncat、strncmp、strstr 、strtok 、strerror 、字符函数、memcpy、memmove、memcmp、memset

m0_60416282的博客 540

C语言进阶——字符串&&内存函数

我们从字符串类型操作开始,延伸到全数据类型的操作,中间还介绍了几个字符分类函数,这些库函数就像一件件实用的工具,是前人智慧的结晶,所以我们不仅要会用,还要用好,并将它们运用到代码中。知其然,并知其所以然,对这些库函数的模拟实现能让我们更为全面的了解实现原理,并避免犯错。

北 海的博客 2550

C语言——字符串和字符串函数

实际上C语言中实际上是没有内置的字符串类型的,大部分字符串都是以字符型数组和常量字符串的形式存在的。在这个例子中,greeting是一个字符数组,自动计算所需的大小以容纳字符串及其结尾的空字符\0。这里,buffer是一个大小为50的字符数组,初始化时只有前5个字符被设置为"Hello",第6个字符为空字符\0,其余字符因不完全初始化而初始化为\0。是一个指向字符的指针,指向字符串字面量的首字符。注意,字符串字面量存储在程序的只读部分,因此通过指针修改字符串内容可能会导致未定义行为。

Stewie Lee的博客 3535

【C语言进阶】常见的字符串函数和内存函数详解及模拟实现

总结了常见的字符串函数和内存函数,图文结合,通俗易懂,非常值得收藏学习。

大猩猩!的博客 4194

【C语言】《C 语言模拟实现字符串与内存操作全系列(含最常用12个模拟实现)》

C语言开发过程中,最频繁的操作之一就是处理字符串。不管是用户输入、文件读取、还是网络数据解析,都绕不开各种字符串操作。C语言中对字符和字符串的处理非常频繁,但C语言本身没有字符串类型,字符串通常放在字符数组中,或者放在常量字符串中常量字符串是只读的,适用于那些不需要修改字符串内容的函数。目标空间必须足够大、还得确保字符串有'\0'结尾等。

2501_93351213的博客 473
上一篇: 解决vsqt无法识别加载ui新添加的控件
下一篇: 位掩码是什么?
飞鸟o
博客等级 码龄3年 1094粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值