逻辑判断符的结合律及strncpy,strncat,strncmp的函数重载

本文详细介绍了C语言中的字符串处理函数strncpy、strncat和strncmp的原型以及它们在处理字符串时的逻辑判断。通过实例展示了如何正确使用这些函数并避免潜在错误。
摘要由CSDN通过智能技术生成

刷题《C programming language》Exercise 5-5

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


char *strncpy( char *s, const char *t, size_t n)
{
    if( !s )
        return 0;
    char * s_tmp = s;
    const char * t_tmp = t;
    int i = 0;
    for( ; *t_tmp != '\0' && i < n || *s_tmp == '\0'  ; i++ )
    {
            *s_tmp++=*t_tmp++;
    }
    return s;
}

char *strncat( char *s, const char *t, size_t n )
{
    if( !s )
        return 0;
    char * s_tmp = s;
    const char * t_tmp = t;
    while( *s_tmp != '\0' )
    {
        s_tmp ++;
    }
    for( int i = 0; *t_tmp != '\0' && i < n; i++ )
    {
        *s_tmp ++ = *t_tmp ++;
    }
    *s_tmp = '\0';
    return s;
}

int strncmp( const char *s, const char *t, size_t n )
{
    if( !s && !t )
        return 0;
    const char * str1 = s;
    const char * str2 = t;
    for( int i = 0; (*str1 != '\0' || *str2 != '\0') && i < n; i++ )
    {
        if ( *str1 != *str2 )
        {
            return *str1 - *str2;
        }
        else
        {
            str1++;
            str2++;
        }
    }
    return 0;
}


int main()
{
    char str1[100] = "Hello World";
    char str2[100] = "Artificial Intelligence";
    char str3[100] = "Hellooo";

    printf("strncpy(Hello World, %s, 6)=%s\n", str3, (char *) strncpy( str1, str3, 6) );
    printf("strncat(HellooWorld, %s, 100)=%s\n",  str2,(char *) strncat( str1, str2, 100) );
    printf("strncmp(HellooWorldArtificial Intelligence, %s, 6)=%d\n", str3, strncmp( str1, str3, 6) );
    printf("strncmp(HellooWorldArtificial Intelligence, %s, 100)=%d\n", str2, strncmp( str1, str2, 100) );
}

1. 注意跟string.h函数库的函数重载时函数的原型相同

char *strncpy( char *s, const char *t, size_t n)

char *strncat( char *s, const char *t, size_t n )

int strncmp( const char *s, const char *t, size_t n )

2. 与逻辑判断要先满足

*str1 != '\0' || *str2 != '\0' && i < n

(*str1 != '\0' || *str2 != '\0') && i < n

第一个条件的逻辑意思是:只要 *str1 *str2 中有一个不为 '\0'(即字符串未结束),且 i 小于 n,循环就会继续执行。第二个条件就能保证在两个字符串中任意一个到达了结束符 '\0' 或者已经比较了 n 个字符后结束循环,而不会出现上述的逻辑错误。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Emilin Amy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值