[字符串和内存函数]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函数则会继续比较。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CaojunjiaOnly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值