C语言基础之strcmp()和strncmp()

本文详细介绍了C语言中用于比较字符串的strcmp和strncmp函数。通过对比分析两种函数的实现原理及改进方式,帮助读者理解如何有效地进行字符串比较,并展示了使用assert进行参数检查的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. strcmp函数
    函数原型:
int strcmp (const char *cs,const char *ct)
{
     unsigned char c1, c2;
     while(1)
     {
         c1=*cs++;
         c2=*ct++;
         if(c1 != c2)
             return c1 < c2 ? -1 : 1;
         if(!c1)
             break;
     }
     return 0;
}

功能:比较两个字符串

参数:@cs    比较的源字符串
          @ct    比较的目的字符串
返回值:相等,返回0
             cs比ct小,返回-1
             cs比ct大,返回1

缺点:没有检查传入的参数是否为空,引入临时变量

改进的strcmp函数
int strcmp (const char *cs,const char *ct)
{
    assert(cs);
    assert(ct);
    while(1)
    {
        if(*cs != *ct)
            return *cs < *ct ? -1 : 1;
        if( !(*cs) )
            break;
        cs++;
        ct++;
    }
    return 0;
}

注意:加入assert函数需要包含assert.h这个头文件


2. strncmp函数

    函数原型:
 int strncmp(const char *cs, const char *ct, size_t count)
 {
     unsigned char c1, c2;
     while(count)
     {
         c1=*c1++;
         c2=*c2++;
         if( c1 != c2 )
             return c1 < c2 ?  -1 : 1;
         if( !c1 )
             break;
         count--;
     }
     return 0;
 }
功能:比较两个字符串的前count位
参数:@cs            比较的源字符串
          @ct            比较的目的字符串
          @count      比较字符串的位数 
返回值:相等,返回0
             cs比ct小,返回-1
             cs比ct大,返回1

缺点:没有检查传入的参数是否为空,引入临时变量

改进的strncmp函数
int strncmp(const char *cs, const char *ct, size_t count)
{
     assert(cs);
     assert(ct);
     while(count)
     {
         if( *cs != *ct )
             return *cs < *ct ?  -1 : 1;
         if( !(*cs) )
             break;
         cs++;
         ct++;
         count--;
     }
     return 0;
}
注意:加入assert函数需要包含assert.h这个头文件
strcmpstrncmp都是C语言中用于字符串比较的库函数,它们的主要区别在于: 1. **功能**: - strcmp() 函数比较两个字符串是否相等,直到遇到第一个不匹配的字符为止。如果所有字符都匹配,则返回0表示相等;若第一个字符串结束前第二个字符串还有剩余字符,则返回负值表示第一个字符串小于第二个;反之则返回正值。 - strncmp() 则是一个变种版本,它允许指定比较的字节数,如果在指定的长度内所有字符都匹配,则同样返回0。如果到达指定长度仍然没有不匹配,函数会继续比较直到遇到第一个不匹配的字符,然后按照strcmp的规则返回结果。如果提供的长度小于实际字符串长度,会假设未比较部分也是相等的。 2. **安全性**: - strcmp() 比较整个字符串,如果没有提供明确的长度,可能会因为其中一个字符串比另一个长而导致意外的结果,特别是当输入包含不可预测内容时。 - strncmp() 更加安全,因为它提供了对比较长度的控制,避免了潜在的安全漏洞。 3. **应用场景**: - 当你需要比较整个字符串是否完全相同时,使用strcmp通常足够。 - 当你需要控制比较的字节数量,比如忽略字符串结尾的特定字符,或者检查两个短字符串是否一致,这时应选择strncmp。 综上所述,strcmp适用于全面比较两个完整字符串,而strncmp则适用于有指定长度范围内的精确比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值