[字符串和内存函数]strcmp和strncmp以及memcmp的区别

简介: [字符串和内存函数]strcmp和strncmp以及memcmp的区别

CPlus中对strcmp的介绍

#include <stdio.h>
#include <string.h>
int main ()
{
  char key[] = "apple";
  char buffer[80];
  do {
     printf ("Guess my favorite fruit? ");
     fflush (stdout);
     scanf ("%79s",buffer);
  } while (strcmp (key,buffer) != 0);
  puts ("Correct answer!");
  return 0;
}

CPlus中对strncmp的介绍

/* strncmp example */
#include <stdio.h>
#include <string.h>
int main ()
{
  char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
  int n;
  puts ("Looking for R2 astromech droids...");
  for (n=0 ; n<3 ; n++)
    if (strncmp (str[n],"R2xx",2) == 0)
    {
      printf ("found %s\n",str[n]);
    }
  return 0;
}

CPlus中对memcmp的介绍

/* memcmp example */
#include <stdio.h>
#include <string.h>
int main ()
{
  char buffer1[] = "DWgaOtP12df0";
  char buffer2[] = "DWGAOTP12DF0";
  int n;
  n=memcmp ( buffer1, buffer2, sizeof(buffer1) );
  if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
  else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
  else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);
  return 0;
}

区别

strcmp和strncmp的比较

strcmp和strncmp都是C语言中用于比较两个字符串的函数,它们的区别在于比较的方式长度限制

strcmp函数用于比较两个字符串,它会逐个比较两个字符串中对应位置上的字符,直到遇到不相等的字符或者到达字符串结束符’\0’。

如果两个字符串相等,返回值为0;

如果第一个字符串大于第二个字符串,返回值大于0;

如果第一个字符串小于第二个字符串,返回值小于0。

strncmp函数也用于比较两个字符串,但它额外需要一个参数来指定要比较的字符个数。它会比较两个字符串中前n个字符,其中n为第三个参数所指定的字符个数。

如果前n个字符都相等,则返回值为0;

否则,返回值遵循和strcmp相同的规则。

strcmp和memcmp的比较

memcmp和strcmp是C语言中用于比较字符串或者字节序列的函数,它们有一些区别。

memcmp函数用于比较两个内存区域的内容。这个函数通过比较两个内存区域的字节进行操作,并返回一个整数值来表示比较结果。

如果返回值小于0,表示第一个内存区域小于第二个;

如果返回值大于0,表示第一个内存区域大于第二个;

如果返回值等于0,表示两个内存区域相等。

memcmp函数比较的是字节序列,不仅可以用来比较字符串,也可以用来比较其他类型的数据。

strncmp是strcmp的一种变体函数,它除了比较两个字符串的内容外,还可以指定比较的长度。它接受三个参数,分别是要比较的两个字符串和要比较的长度。

strcmp函数用于比较两个字符串的内容。这个函数通过比较两个字符串中对应位置的字符进行操作,并返回一个整数值来表示比较结果。

如果返回值小于0,表示第一个字符串小于第二个;

如果返回值大于0,表示第一个字符串大于第二个;

如果返回值等于0,表示两个字符串相等。strcmp函数只能用来比较字符串。

所以,区别在于memcmp函数可以比较字节序列,而strcmp函数只能比较字符串。此外,对于包含空字符的字符串,strcmp函数在遇到空字符时会停止比较,而memcmp函数则会继续比较。

相关文章
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
15天前
|
存储 缓存 安全
阿里云服务器内存型r7、r8a、r8y、r8i实例区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y和内存型r8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:8,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍内存型r7、r8a、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
1月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
27天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
23 0
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
378 0
|
26天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
55 1
|
1月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
1月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
1月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
42 4
|
1月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
53 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配